Переключение вкладок формы Windows

#c# #winforms

#c# #winforms

Вопрос:

У меня есть три вкладки в элементе управления вкладками Windows Forms. В настоящее время в Tab1 у меня есть кнопка, которая сохраняет информацию в текстовом поле и автоматически изменяет tabcontrol.Выбранный индекс в Tab2. Затем Tab2 использует информацию, сохраненную из текстового поля tab1.

Я хочу, чтобы окно сообщения всплывало всякий раз, когда пользователь изменяет текстовое поле в tab1, но затем вручную нажимает tab2 или tab3, не нажимая кнопку для сохранения информации.

Итак, вкратце, у меня получилось так, что нажатие кнопки на tab1 автоматически отправляет ее в tab2. Я хочу, чтобы окно сообщения отображалось, если кнопка на tab1 не была нажата, когда информация была изменена, и пользователь вручную изменил вкладку.

Ответ №1:

Я думаю, что дизайн, подобный мастеру, для вашего приложения является более подходящим. Вкладки не должны так работать с точки зрения пользователя.

Но обходной путь для вашей текущей ситуации заключается в:

  • объявите переменную, например dirty
  • устанавливайте эту переменную всякий раз, когда какой-либо элемент управления в tab1 был отредактирован
  • очистите переменную, если нажата кнопка в tab1
  • проверьте это, если выбраны tab2 или tab3

Комментарии:

1. спасибо, этот обходной путь, вероятно, лучшее решение на данный момент. Я понимаю, что это не совсем то, для чего были созданы вкладки. В будущем я буду иметь это в виду.

Ответ №2:

Вы можете использовать событие отмены выбора в TabControl, чтобы получать информацию об изменении выбранной вкладки. Если отменяемая вкладка — это вкладка с кнопкой на ней, и информация не сохраняется, вы можете отобразить окно сообщения.

Кроме того, в зависимости от того, что делает ваша программа, может иметь смысл продолжить и сохранить информацию при изменении вкладки, даже не беспокоя пользователя.

Комментарии:

1. Это все равно будет срабатывать при нажатии кнопки.

2. @jmccarthy: Я не совсем уверен, что вы имеете в виду.

3. В вашем первоначальном ответе говорилось использовать событие SelectedIndexChanged, но это срабатывает при изменении свойства SelectedIndex в элементе управления tab. Я предполагаю, что OP изменяет это свойство при нажатии кнопки, что приведет к запуску этого события. OP хочет, чтобы окно сообщения отображалось только тогда, когда кнопка не нажата, так что это не сработало бы. Однако с тех пор вы изменили свой ответ, поэтому мой первый комментарий недействителен.

4. @jmccarthy: ох… теперь это имеет больше смысла. Я забыл, что OP заставляет нажатие кнопки отправлять пользователя на вкладку 2.

5. Я думаю, что, возможно, если мне нужно сохранить это автоматически, я могу заставить всплывающее окно уведомлять о том, что изменения были сохранены каждый раз, когда tab1 отменяется. Спасибо