相关疑难解决方法(0)

ComboBox在下拉时如何捕获鼠标?

我试图模拟ComboBox下拉列表的行为(或其他下拉菜单的行为,包括上下文菜单),当您点击其他任何地方时,下拉关闭,即使在无法聚焦的事情上也是如此.

我已经尝试订阅MouseCaptureChanged,LostFocus和Leave等事件.我有一个自定义UserControl作为下拉列表,我只想在用户点击其他任何地方时关闭它.

这似乎是在许多控件中完成的事情,所以如果没有一个简单的方法,我会感到惊讶.

到目前为止,我可以提出的过于复杂的方法是使用pinvoke和SetCapture()函数,或者创建一个MessageFilter.如果这些是唯一的选择,我不确定哪个更好.

.net c# mouse combobox capture

7
推荐指数
1
解决办法
2098
查看次数

如何在WinForms中模拟一个下拉窗口?

我知道Windows Combobox控件不过是一个TextboxListBox粘在一起的控件。

我需要在WinForms中模拟相同的东西。我试图弄清楚必须设置以获得适当效果的Windows窗口选项。

  • 该下拉列表不能是子窗口 -否则它将被剪切到父窗口区域
  • 从概念上讲,它必须是一个弹出窗口 -一个重叠的窗口
  • 它可以是一个拥有的窗口 -拥有的窗口在z顺序中始终位于其所有者的上方。当其所有者被销毁时,系统会自动销毁拥有的窗口。当拥有者的窗口最小化时,将隐藏拥有的窗口。

到目前为止,我管理的最好的就是创建

  • 无边距(this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None
  • 最上方(this.TopMost = true
  • 任务栏(this.ShowInTaskbar = false)中未显示的表单

这个无边界的最上面的表单包含我的“下拉”控件。当下拉列表失去焦点时,我会“隐藏”我的下拉列表:

this.Deactivate += new EventHandler(TheDropDownForm_Deactivate);

void TheDropDownForm_Deactivate(object sender, EventArgs e)
{
   ...

   this.Close();
}
Run Code Online (Sandbox Code Playgroud)

这种混乱的局面效果很好。

在此处输入图片说明

...除了“下拉菜单”使焦点从所有者表单移开。

这是我的问题,我的弹出窗口应具有哪些属性?

但是,当我失去下拉菜单时(如何无法失去焦点),我该如何隐藏呢?


如何在.NET中模拟组合框下拉菜单?


注意:请勿将示例屏幕快照中看到的内容与其他内容混淆。我问如何在Winforms中创建“下拉”表单-内容可能与上面的屏幕截图不同:

在此处输入图片说明

c# winforms drop-down-menu

5
推荐指数
1
解决办法
3190
查看次数

标签 统计

c# ×2

.net ×1

capture ×1

combobox ×1

drop-down-menu ×1

mouse ×1

winforms ×1