Как обнаружить открытое и закрытое состояния 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), то полученные события фокуса будут обрабатывать этот случай. Если вам нужно вносить изменения только при использовании мыши, события "Активные меню" должны работать.

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