切换标签

时间:2009-04-02 21:22:59

标签: wpf wpf-controls

我的TabControl中有两个标签。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查数据是否需要保存到数据库)(交换机可以在任何方向:从tab1到tab2,从tab2到tab1)。我该怎么做?

我考虑使用附加到每个标签的ButtonBase.Click事件,但由于某种原因它不会触发。

编辑:我忘了提及我希望能够“取消”该事件,以防用户决定不保存更改,并且必须“导航回”他或她试图离开的标签。

2 个答案:

答案 0 :(得分:2)

查看标签控件的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 Change,那么你必须处理布尔值,并控制事件处理程序中的功能是否会触发,然后将选定的选项卡设置回上一个选项卡, :

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”按钮和鼠标中键单击关闭)。

答案 1 :(得分:0)

如果你正在使用WPF,我不知道它有什么,但在.NET中,TabControl对象有一个“SelectedIndexChanged”事件。假设你在设计师中,只需将你想要的方法附加到那个事件上,你就是金色的,或者通过以下代码的代码:

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

但是我不知道WPF,所以如果它完全不同,你就是自己的,但我想它会非常相似。