Dot-Net

組合框如何在顯示列表項時將滑鼠事件攔截到窗體上的任意位置以隱藏列表?

  • December 23, 2011

我正在嘗試實現一個功能類似於組合框的.net 表單控制項,但我不知道在表單上的任何位置攔截滑鼠事件以取消展開項目列表的正確方法。

如何在顯示列表時防止其他控制項響應滑鼠事件?

如何有效且安全地將滑鼠點擊事件擷取到表單上的任何位置,以隱藏展開的列表?

只需使用 aToolStripControlHostToolStripDropDown,它就會像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

表單上帶有 Button 控制項的快速展示:

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

要回答您標題中的問題,我認為SetCaptureRelease Capture的 pinvoke 呼叫用於處理此類功能。

引用自:https://stackoverflow.com/questions/8611348