当窗体被激活/聚焦时,如何在C#菜单条上点击鼠标
本文关键字:菜单 鼠标 激活 窗体 聚焦 | 更新日期: 2023-09-27 18:14:53
可能重复:
聚焦表单上的点击丢失
如果带有MenuStrip
的窗体不是具有焦点的窗口,并且您单击MenuStrip
,它会使用第一次单击使窗口处于活动状态,然后您必须再次单击MenuStrip
才能使菜单下拉。按钮的工作方式不同。如果带有按钮的表单未激活/没有焦点,并且您单击该按钮,则它将在第一次单击时注册为按钮单击,同时使该表单处于激活/焦点状态。我真的需要MenuStrip
上的菜单在第一次点击时下拉,即使表单没有激活。
当窗体Enter和/或Activate事件被触发时,我尝试使用OnMouseClick(...)
方法模拟鼠标单击,但这不起作用。Enter和Activate事件是在鼠标按下时触发的,因此通过在Enter或Activate事件处理程序中放入OnMouseClick(...)
调用,它试图在第一次鼠标点击释放之前激发第二次鼠标点击。
不知何故,我需要OnMouseClick(...)
发生在Activate事件发生之后,然后发生在MouseUp
之后。
使用此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();
}
}