C# 显示ToolStripDropDown时捕获鼠标消息

C# 显示ToolStripDropDown时捕获鼠标消息,c#,winforms,toolstripdropdown,mousecapture,C#,Winforms,Toolstripdropdown,Mousecapture,我试图创建一个包含自定义控件的“工具提示”。我使用ToolStripDropDown实现了它,它完成了我需要的功能-当用户单击其他地方时关闭,或者激活另一个窗口等 但是,我希望能够在父控件中获取MouseMove事件,即使显示ToolStripDropDown。我尝试在不同阶段设置父控件的Capture属性(在显示下拉列表之前,在其打开的事件处理程序等中),但它总是立即设置回false。是否有方法(不一定使用Capture属性)在父控件中获取MouseMove事件?不,我不想考虑丑陋的黑客喜欢使

我试图创建一个包含自定义控件的“工具提示”。我使用
ToolStripDropDown
实现了它,它完成了我需要的功能-当用户单击其他地方时关闭,或者激活另一个窗口等


但是,我希望能够在父控件中获取
MouseMove
事件,即使显示
ToolStripDropDown
。我尝试在不同阶段设置父控件的
Capture
属性(在显示下拉列表之前,在其
打开的
事件处理程序等中),但它总是立即设置回false。是否有方法(不一定使用
Capture
属性)在父控件中获取
MouseMove
事件?不,我不想考虑丑陋的黑客喜欢使用计时器和定期检查鼠标位置。

< P>如果你想知道鼠标的位置,那么你应该登记<代码> MouseDown < /C>事件,用于父控件和代码>工具条带> /COD>控件,类似于:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    lblPosition.Text = e.Location.ToString();
}

private void toolStripDropDownButton2_MouseMove(object sender, MouseEventArgs e)
{
    lblPosition.Text = e.Location.X + toolStripDropDownButton2.Bounds.Location.X + ", " + toolStripDropDownButton2.Bounds.Location.Y + e.Location.Y;
}

对于
ToolStripDropDown
您应该计算相对于其父项的相对位置

右侧,单击下拉列表外部时,它将关闭。在窗口外单击时获取事件需要一点魔力。它需要捕获鼠标。你不能两全其美。我不需要获取
MouseDown
事件,只需要
MouseMove
事件。当显示
ToolStripDropDown
但鼠标在其外部时,哪个窗口获取这些事件?下拉窗口获取这些事件。因为它捕获了鼠标。我的意思是,如果我不手动设置
Capture
属性,哪一个窗口可以获取鼠标,也就是说,我只是显示下拉菜单(例如上下文菜单)。在这件事上,您没有任何选择,下拉菜单必须捕获鼠标,因此将始终获得鼠标消息。它必须这样做,否则就不能正常工作。不知道为什么这会让你困惑,除了它发生在你看不见的代码中。