Panel.Dispose закрывает контекстное меню, почему?
Согласно ответу Коди на этот вопрос, я получил класс из 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 ответ
Когда вы делаете это, вы удаляете фокус из контекстного меню, так как именно текстовое поле имело фокус, когда вы его удалили, теперь ничего нет в ContextMenuStrip
это имеет фокус больше.