Как обнаружить открытое и закрытое состояния MenuStrip?
Мне нужно обнаруживать всякий раз, когда MenuStrip (НЕ контекстное меню) открывается и закрывается. События Enter и Leave, похоже, не работают.
Зачем мне это нужно: я использую MenuStrip с такими опциями, как "Файл", "Редактировать", "О программе" и т. Д. Но когда полоса меню активна, и пользователь перемещается по ней, используя мышь или клавиатуру, другие элементы управления на Форма Windows также отвечает на это.
Например: я нажимаю "Изменить> Вставить специальный..> Неформатированный текст" в моем приложении с помощью мыши. Но под расширенным пунктом меню находится элемент управления рендерингом XNA 2d, который также обнаруживает ввод мыши и делает то, чего я не хочу. Теперь, если бы я мог просто определить, когда открывается меню, я мог бы отключить / включить соответствующие элементы управления.
1 ответ
Не зная немного больше о том, что вы делаете, вы можете попробовать код ниже:
private void Form1_Load(object sender, EventArgs e)
{
menuStrip1.GotFocus += new EventHandler(MenuStrip1_GotFocus);
menuStrip1.LostFocus += new EventHandler(MenuStrip1_LostFocus);
}
private void MenuStrip1_GotFocus(object sender, EventArgs e)
{
textBox1.Text = "Has Focus";
}
private void MenuStrip1_LostFocus(object sender, EventArgs e)
{
textBox1.Text = "Lost Focus";
}
private void menuStrip1_MenuActivate(object sender, EventArgs e)
{
textBox1.Text = "Has Focus";
}
private void menuStrip1_MenuDeactivate(object sender, EventArgs e)
{
textBox1.Text = "Lost Focus";
}
Кажется, это работает для того, что вы описали выше. Если у вас есть полоска меню с остановкой табуляции (true), то полученные события фокуса будут обрабатывать этот случай. Если вам нужно вносить изменения только при использовании мыши, события "Активные меню" должны работать.