组合框在显示列表项时如何拦截鼠标事件到表单上的任何位置来隐藏列表?

Cra*_*ney 8 .net events combobox winforms

我正在尝试使用类似于组合框的功能实现.net表单控件,但我不知道在表单上的任何位置拦截鼠标事件以取消扩展项目列表的正确方法.

在显示列表时,如何防止其他控件响应鼠标事件?

如何高效安全地将鼠标单击事件捕获到表单上的任何位置,以隐藏扩展列表?

Lar*_*ech 9

只需使用一个ToolStripControlHost与一起ToolStripDropDown,和它的工作就像ComboBox下拉.您不必担心处理鼠标事件.

我之前用过这个:

Private Sub ShowControl(ByVal fromControl As Control, ByVal whichControl As Control)
  '\\ whichControl needs MinimumSize set:'
  whichControl.MinimumSize = whichControl.Size

  Dim toolDrop As New ToolStripDropDown()
  Dim toolHost As New ToolStripControlHost(whichControl)
  toolHost.Margin = New Padding(0)
  toolDrop.Padding = New Padding(0)
  toolDrop.Items.Add(toolHost)
  toolDrop.Show(Me, New Point(fromControl.Left, fromControl.Bottom))
End Sub
Run Code Online (Sandbox Code Playgroud)

使用表单上的Button控件进行快速演示:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
  ShowControl(Button1, New MonthCalendar)
End Sub
Run Code Online (Sandbox Code Playgroud)

为了回答标题中的问题,我认为使用SetCaptureRelease Capture的pinvoke调用来处理这种类型的功能.