3

可能重复:
点击失去焦点表格

如果带有 a 的窗体MenuStrip不是具有焦点的窗口并且您单击MenuStrip,它会使用第一次单击使窗口处于活动状态,然后您必须MenuStrip 再次单击才能使菜单下拉。按钮的工作方式不同。如果带有按钮的表单未激活/没有焦点并且您单击该按钮,它将在第一次单击时注册为按钮单击,同时使该表单激活/获得焦点。我真的需要在MenuStrip第一次单击时下拉菜单,即使表单未处于活动状态。

我尝试使用该OnMouseClick(...)方法在触发表单 Enter 和/或激活事件时触发模拟鼠标单击,但这不起作用。Enter 和 Activate 事件在 Mouse Down 时触发,因此通过OnMouseClick(...)在 Enter 或 Activate 事件处理程序中进行调用,它会尝试在释放第一次鼠标单击之前触发第二次鼠标单击。

我以某种方式需要在OnMouseClick(...)激活事件发生之后发生,然后在发生之后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 回答