【发布时间】:2014-08-29 09:20:45
【问题描述】:
在开发简单的 Windows 窗体 UI 应用程序时,我正在尝试创建一种效果来显示和关闭鼠标事件的下拉菜单。
就像我可以通过设置comboBox.DroppedDown = true; 打开MouseMove 事件的下拉菜单一样
但是,当我在 MouseLeave 事件上设置 comboBox.DroppedDown = false; 以关闭它时,这同样不起作用。
不知道这里到底需要做什么。
问题出在MouseLeave 上,下拉菜单不会失去焦点,因此除非您从列表中选择一项,否则它不会关闭。它等待用户从列表中选择一个项目。
如果它可以失去对MouseLeave 的关注,就可以了。
请有任何建议。
【问题讨论】:
-
当 DropDown 为 Down 时,鼠标 已捕获。关闭它会有所作为,但不会产生预期的结果。
ReleasingCapture 的更好方法或将鼠标事件跟踪到外部控件的某种方法将是研究的方向.. -
您可以让某种后台工作人员/计时器在表单上工作,检查鼠标位置(坐标)是否在组合框 + 组合框下拉菜单中。如果没有,您可以强制 DroppedDown 关闭。这会影响性能,但也应该可行。
-
在 TimerTick 事件中使用 Bruno 的建议:` Point MP = new Point(Cursor.Position.X - this.Location.X,Cursor.Position.Y - this.Location.Y );大小 DDS = new Size(comboBox1.DropDownWidth, comboBox1.DropDownHeight);矩形 DDR = new Rectangle(new Point(comboBox1.Left, comboBox1.Top + comboBox1.Height) , DDS); if (!DDR.Contains(MP) ) { comboBox1.DroppedDown = false; timer2.Stop(); }`
标签: c# .net winforms combobox dropdownbox