我的TabControl中有两个标签。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查数据是否需要保存到数据库)(交换机可以在任何方向:从tab1到tab2,从tab2到tab1)。我该怎么做?
我考虑使用附加到每个标签的ButtonBase.Click事件,但由于某种原因它不会触发。
编辑:我忘了提及我希望能够“取消”该事件,以防用户决定不保存更改,并且必须“导航回”他或她试图离开的标签。
答案 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,所以如果它完全不同,你就是自己的,但我想它会非常相似。