Переключение вкладок - PullRequest
       7

Переключение вкладок

2 голосов
/ 03 апреля 2009

У меня есть две вкладки в моем TabControl. Мне нужно запустить метод (проверяет, нужно ли сохранять данные в базе данных) каждый раз, когда пользователь переключается с одной вкладки на другую (переключение может быть в любом направлении: с tab1 на tab2 и с tab2 на tab1). Как мне это сделать?

Я думал об использовании события ButtonBase.Click, которое прикрепляется к каждой вкладке, но по какой-то причине не срабатывает.

РЕДАКТИРОВАТЬ: я забыл упомянуть, что хочу иметь возможность "отменить" событие в случае, если пользователь решает не сохранять изменения и его необходимо "вернуться назад" на вкладку, которую он или она пытались покинуть.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2009

Извлечение SelectionChanged событие элемента управления вкладкой.

РЕДАКТИРОВАТЬ: изменения в вопросе

Вы хотите отменить событие или отменить сохранение?

Для отмены сохранения нужно просто спросить пользователя о чем-то вроде:

Dim msRes as MessageResult = MessageResult.No
If mySwitchedFromTab.IsDirty Then 
      msRes = msgbox("Save changes to previous tab?", YesNo, "MyApp")
      if msRes = MessageResult.Yes Then 
          SaveMethod()
      End If 
End If

Теперь, чтобы отменить изменение TAB, вам нужно иметь дело с логическими значениями и контролировать, будет ли срабатывать функция в обработчике событий, или затем возвращать выбранную вкладку на предыдущую вкладку, что-то вроде этого :

If myGlobalTabFireBoolean Then
   Dim msRes as MessageResult = MessageResult.No
   If mySwitchedFromTab.IsDirty Then 
         msRes = msgbox("Save changes to previous tab?", YesNoCancel, "MyApp")
         Select Case msRes 
             Case MessageResult.Yes 
                 SaveMethod()
             Case MessageResult.Cancel 
                 myGlobalTabFireBoolean = False
                 myTabContainer.SelectedItem = myPreviousTab
             Case Else            
                 ' Do Nothing 
         End If 
   End If
 Else
     myglobalTabFireBoolean = True 
End IF

Теперь это не единственный способ выполнить этот тип функциональности, так как это зависит от личного стиля кодирования, и даже от таких вещей, как создание элементов вкладок (я создаю вкладки в моем tabitem гораздо более подробно, так что я могу переопределите его стандартное поведение и заставьте их работать как вкладки в Firefox и IE с помощью кнопки «X» и средней кнопки мыши, чтобы закрыть).

0 голосов
/ 03 апреля 2009

Если вы используете WPF, я понятия не имею, что там, но в .NET объект TabControl имеет событие "SelectedIndexChanged". Предполагая, что вы работаете в дизайнере, просто прикрепите метод, который вы хотите, к этому событию, и вы в золотой форме, или с помощью кода, например:

    this.rootTabControl.SelectedIndexChanged += new System.EventHandler(this.myHandlerHere);

Но я не знаю WPF, поэтому, если он совсем другой, ты сам по себе, но я думаю, что это что-то очень похожее.

...