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 это имеет фокус больше.

Другие вопросы по тегам