2

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

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

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

4

2 回答 2

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 更改,那么您必须处理布尔值,并控制事件处理程序中的功能是否会触发,然后将选定的选项卡设置回前一个选项卡,类似于以下内容:

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

于 2009-04-02T21:27:41.300 回答
0

如果您使用的是 WPF,我不知道那里有什么,但在 .NET 中,TabControl 对象有一个“SelectedIndexChanged”事件。假设您在设计器中,只需将您想要的方法附加到该事件并且您是黄金,或者通过类似以下的代码:

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

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

于 2009-04-02T21:36:16.257 回答