3

重複の可能性:
フォーカシング フォームでクリックが失われる

の付いたフォームMenuStripがフォーカスのあるウィンドウではなく、 をクリックすると、その最初のクリックを使用してウィンドウがアクティブになり、再度MenuStripをクリックしてメニューをドロップダウンする必要があります。ボタンの動作が異なります。ボタンのあるフォームがアクティブでない/フォーカスがない場合にそのボタンをクリックすると、最初のクリックでボタンのクリックとして登録され、同時にそのフォームがアクティブ/フォーカスされます。フォームがアクティブでない場合でも、最初のクリックでドロップダウンするには、そのメニューが本当に必要です。MenuStrip MenuStrip

このメソッドを使用して、フォームの Enter および/または Activate イベントがトリガーされたときにシミュレートされたマウス クリックを起動しようとしましたOnMouseClick(...)が、うまくいきません。Enter および Activate イベントはマウス ダウンでトリガーされるためOnMouseClick(...)、Enter または Activate イベント ハンドラーに呼び出しを配置することで、最初のマウス クリックが離される前に 2 回目のマウス クリックを発生させようとします。

OnMouseClick(...)Activateイベントが発生した後、発生した後に何らかの形で発生する必要がありMouseUpます。

4

1 に答える 1

2

この MenuStrip 派生物を代わりに使用します。

public class ActivatingMenuStrip : MenuStrip
{
    public ActivatingMenuStrip()
    {
        InitializeComponent();
    }


    int WM_MOUSEACTIVATE = 0x21;
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_MOUSEACTIVATE)
        {
            this.Parent.Focus();
        }
        base.WndProc(ref m);
    }

    private System.ComponentModel.IContainer components = null;

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void InitializeComponent()
    {
        components = new System.ComponentModel.Container();
    }

}
于 2011-11-17T14:33:45.770 に答える