Tre*_*ott 7 .net c# mouse combobox capture
我试图模拟ComboBox下拉列表的行为(或其他下拉菜单的行为,包括上下文菜单),当您点击其他任何地方时,下拉关闭,即使在无法聚焦的事情上也是如此.
我已经尝试订阅MouseCaptureChanged,LostFocus和Leave等事件.我有一个自定义UserControl作为下拉列表,我只想在用户点击其他任何地方时关闭它.
这似乎是在许多控件中完成的事情,所以如果没有一个简单的方法,我会感到惊讶.
到目前为止,我可以提出的过于复杂的方法是使用pinvoke和SetCapture()函数,或者创建一个MessageFilter.如果这些是唯一的选择,我不确定哪个更好.
ComboBox 由 2 个控件构成。
通常情况下,底座是可见的。当用户单击 ComboBox 时,Base 控件将隐藏,而 DropDownList 控件将显示。此切换是在后台完成的,因此对于用户来说,控件似乎刚刚扩展。
您想要捕获的事件是通过 DropDownList 窗口完成的。如果您单击客户区域上的某处,DropDownList 窗口将通过其WndProc(Message% m)方法接收WM_KILLFOCUS事件。然后向父窗口(Base 控件)发送一条带有WParam=526318 ( HIWORD(WParam)=8 ) 的WM_COMMAND ( OCM_COMMAND ) 消息,并且 Base 控件知道他应该隐藏 DropDownList 窗口。
因此,您需要做的是实现附加的下拉窗口并捕获 WM_KILLFOCUS 事件。