我的 TabControl 中有两个选项卡。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查是否需要将数据保存到数据库)(切换可以是任何方向:从 tab1 到 tab2 以及从 tab2 到 tab1)。我该怎么做呢?
我考虑过使用附加到每个选项卡的 ButtonBase.Click 事件,但由于某种原因它不会触发。
编辑:我忘了提到我希望能够“取消”事件,以防用户决定不保存更改并且必须“导航回”到他或她试图离开的选项卡。
我的 TabControl 中有两个选项卡。每次用户从一个选项卡切换到另一个选项卡时,我都需要运行一个方法(检查是否需要将数据保存到数据库)(切换可以是任何方向:从 tab1 到 tab2 以及从 tab2 到 tab1)。我该怎么做呢?
我考虑过使用附加到每个选项卡的 ButtonBase.Click 事件,但由于某种原因它不会触发。
编辑:我忘了提到我希望能够“取消”事件,以防用户决定不保存更改并且必须“导航回”到他或她试图离开的选项卡。
查看选项卡控件的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”按钮和鼠标中键单击关闭)。
如果您使用的是 WPF,我不知道那里有什么,但在 .NET 中,TabControl 对象有一个“SelectedIndexChanged”事件。假设您在设计器中,只需将您想要的方法附加到该事件并且您是黄金,或者通过类似以下的代码:
this.rootTabControl.SelectedIndexChanged += new System.EventHandler(this.myHandlerHere);
但我不知道 WPF,所以如果它完全不同,你就靠自己了,但我想它是非常相似的。