Panel.Dispose закрывает контекстное меню, почему? - PullRequest
0 голосов
/ 06 марта 2011

Согласно ответу Коди на этот вопрос , я извлек класс из ContextMenuStrip и обработал ProcessCmdKey.Это успешно предотвращает закрытие меню при нажатии Enter , когда текстовое поле, встроенное в меню, имеет фокус.Так что все хорошо, кроме одной вещи.

После нажатия клавиши Enter я удаляю текстовое поле из меню, и удаление этого элемента управления приводит к закрытию меню.Когда я делаю это:

If (m_inputPanel IsNot Nothing) Then m_inputPanel.Hide()
If (m_inputPanel IsNot Nothing) Then m_inputPanel.Parent.Controls.Remove(m_inputPanel)
If (m_inputPanel IsNot Nothing) Then m_inputPanel.Dispose()

, меню закрывается.Когда я закомментирую третью строку, меню остается открытым.(Между прочим, m_inputPanel.Parent - это пользовательский элемент управления, который встроен в меню с помощью ToolStripControlHost)

Почему на Божьей Зеленой Земле имеет значение, что я располагаю элементом управления, который больше не является частью меню?

1 Ответ

1 голос
/ 06 марта 2011

Когда вы это делаете, вы удаляете фокус из контекстного меню, поскольку именно текстовое поле имело фокус, когда вы его удалили, теперь в ContextMenuStrip больше нет фокуса.

...