如果带有MenuStrip
的表单不是具有焦点的窗口,而您单击MenuStrip
,则会使用该第一次单击使窗口处于活动状态,然后您必须单击{ {1}} 再次以使菜单下拉。按钮的工作方式不同。如果带有按钮的表单未激活/没有焦点并且您单击该按钮,它将在第一次单击时注册为按钮单击,同时使该表单处于活动/聚焦状态。即使表单未处于活动状态,我也需要MenuStrip
上的该菜单才能下载第一次点击。
我尝试使用MenuStrip
方法在触发表单Enter和/或Activate事件时触发模拟鼠标单击,但这不起作用。鼠标按下时会触发Enter和Activate事件,因此通过在Enter或Activate事件处理程序中调用OnMouseClick(...)
,它会在第一次鼠标单击释放之前尝试触发第二次鼠标单击。
我在某种程度上需要在发生Activate事件后发生OnMouseClick(...)
,然后在发生OnMouseClick(...)
之后发生。{/ p>
答案 0 :(得分: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();
}
}