C# 当鼠标落下时,组合框如何捕获鼠标?
我试图模拟一个组合框下拉菜单(或其他下拉菜单,包括上下文菜单)的行为,当你点击其他地方时,下拉菜单关闭,即使是在无法聚焦的地方 我尝试过订阅MouseCaptureChanged、LostFocus和Leave等事件。我有一个自定义的UserControl,它充当下拉菜单,我只想在用户单击其他任何地方时将其关闭 这似乎是在许多控件中完成的,所以如果没有一种简单的方法,我会感到惊讶C# 当鼠标落下时,组合框如何捕获鼠标?,c#,.net,combobox,mouse,capture,C#,.net,Combobox,Mouse,Capture,我试图模拟一个组合框下拉菜单(或其他下拉菜单,包括上下文菜单)的行为,当你点击其他地方时,下拉菜单关闭,即使是在无法聚焦的地方 我尝试过订阅MouseCaptureChanged、LostFocus和Leave等事件。我有一个自定义的UserControl,它充当下拉菜单,我只想在用户单击其他任何地方时将其关闭 这似乎是在许多控件中完成的,所以如果没有一种简单的方法,我会感到惊讶 到目前为止,我能想到的超复杂方法是使用pinvoke和SetCapture()函数,或者创建MessageFilte
到目前为止,我能想到的超复杂方法是使用pinvoke和SetCapture()函数,或者创建MessageFilter。如果这些是唯一的选项,我不确定哪一个更好。组合框由两个控件构成
- 基本-未激活时可见(控制)
- 下拉列表-在编辑模式或列表选择模式(窗口或窗体)期间可见
因此,您需要实现额外的下拉窗口并捕获WM_KILLFOCUS事件。您提到的控件模板用于下拉列表,将弹出窗口作为容器,StaysOpen属性设置为false(我认为这是默认设置)
实现下拉式控件的简单方法是使用ToolStripControlHost和ToolStripDropDown。就像一个组合框。请看,我正在尝试ToolStripControlHost。我无法消除弹出窗口顶部的难看边框,或者每当打开下拉列表时组合框的闪烁。请确保将ToolStripContorlHost的边距和ToolStripDropDown的填充设置为0。控件上的闪烁是另一个问题-是否尝试使用带有自定义下拉列表的组合框?是。我重写OnDropDown并重置IntegralHeight属性以强制关闭它。它使它不会出现,但仍会闪烁。@Moozhe,您使用的是Windows窗体还是WPF?