Как комбинированные блоки при отображении элементов списка перехватывают события мыши в любом месте формы, чтобы скрыть список? - PullRequest
8 голосов
/ 23 декабря 2011

Я пытаюсь реализовать элемент управления формой .net с функциональностью, аналогичной комбинированному окну, но я не знаю, как правильно перехватывать события мыши в любом месте формы, чтобы не расширять список элементов.

Как запретить другим элементам управления реагировать на события мыши во время отображения списка?

Как эффективно и безопасно перехватить событие щелчка мыши в любом месте формы, чтобы скрыть расширенный список?

Ответы [ 2 ]

9 голосов
/ 23 декабря 2011

Просто используйте 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

Быстрое демо с элементом управления Button на форме:

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

Чтобы ответить на вопрос в вашем заголовке, я думаю вызовы pinvoke SetCapture и Release Capture используются для обработки функций такого типа.

1 голос
/ 23 декабря 2011

Control.Capture

Как объяснено в документации, вы теперь «владеете» мышью (пока кто-то другой не захватит ее - хотя это дурной тон).Вы получаете все сообщения мыши и можете обработать «Down», который не находится под вашим контролем, чтобы отклонить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...