当前位置: 首页 > 编程语言 > C#

ComboBox下拉时如何捕获鼠标?分享

时间:2023-04-10 19:13:26 C#

ComboBox鼠标下拉时如何捕捉?我正在尝试模拟ComboBox下拉菜单(或其他下拉菜单,包括上下文菜单)的行为,当您单击其他任何地方时,即使在无法聚焦的地方,下拉菜单也会关闭。我试过订阅MouseCaptureChanged、LostFocus和Leave等事件。我有一个用作下拉菜单的自定义UserControl,我只希望它在用户单击其他任何地方时关闭。这似乎是在许多控件中完成的事情,所以如果没有简单的方法,我会感到惊讶。到目前为止,我能想到的过于复杂的方法是使用pinvoke和SetCapture()函数,或者创建MessageFilter。如果这些是唯一的选择,我不确定哪个更好。ComboBox由2个控件组成。通常,底座是可见的。当用户单击ComboBox时,Base控件将隐藏和显示DropDownList控件。这种切换是在后台完成的,因此对于用户来说,控件似乎只是展开了。您要捕获的事件是通过DropDownList窗口完成的。如果您单击客户区的某处,DropDownList窗口将通过其WndProc(Message%m)方法接收WM_KILLFOCUS事件。然后用WParam=526318(HIWORD(WParam)=8)向父窗口(Base控件)发送一个WM_COMMAND(OCM_COMMAND)消息,Base控件知道他应该隐藏DropDownList窗口。因此,您需要做的是实现一个额外的DropDown窗口并捕获WM_KILLFOCUS事件。您提到的控件模板用于下拉列表弹出窗口作为容器,并将StaysOpen属性设置为false(我认为这是默认设置)。ComboBox模板示例以上是C#学习教程:ComboBox下拉时如何捕获鼠标?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: