-1

user32.dllを使用するサードパーティのコントロールを修正する

public partial class Form1 : Form
{
    TheForm theForm;//empty form
    public Form1()
    {
        InitializeComponent();
        theForm = new TheForm();
    }

    internal const int SWP_SHOWWINDOW = 0x0040;

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    internal static extern int ShowWindow(IntPtr hWnd, short cmdShow);        

    private void button1_Click(object sender, EventArgs e)//shows theForm when it wants to
    {
        ShowWindow(theForm.Handle, SWP_SHOWWINDOW);
    }

    private void button2_Click(object sender, EventArgs e)//shows theForm always
    {
        theForm.Show();
    }
}

user32 ShowWindowを呼び出した後、ほとんどの場合、ウィンドウが「行き詰まった」のはなぜですか。フォーカスの喪失をキャプチャして破棄しますが、マウスイベントをキャプチャせず、それ自体をペイントしません。

4

1 に答える 1

1

専門家ではありませんが、ボタンクリックイベントハンドラーメソッドの外部でShow()メソッドを呼び出してフォームを表示する必要があると思います。表示するフォームがない場合は、ボタンをクリックしてフォームを表示することはできません。

WinFormsアプリケーションを作成するためにC#でuser32.dllを使用する理由があるかどうかはわかりません。これはC#によって行われるため、話す方法で行われます。

必要なのは、VisualStudioがドラッグアンドドロップフォームデザイナでフォームコードを作成できるようにすることだけです。次に、Main()メソッド専用の新しいソースファイルを作成せずにフォームを表示して使用するには、生成されたコードにMain()メソッドを記述します。

Windowsフォームデザイナの使用に関するすばらしい記事があります。

http://msdn.microsoft.com/en-us/library/360kwx3z(v=vs.90).aspx

于 2012-11-16T05:05:11.090 に答える