我正在学习如何使用 Visual Basic Express 2008 开发 Windows 窗体应用程序,我的测试/学习应用程序有一个 TabControl 和几个测试页(例如,3 个,这里的数字不相关)。
现在,我正在处理 Tabcontrol 上的 MouseClick 事件,我似乎无法弄清楚如何获取单击了哪个选项卡。我相信如果我单击选项卡条的另一个位置,则不会触发 MouseClick 事件,因此必须单击一个选项卡。问题是,哪个是标签?
任何帮助,将不胜感激。谢谢!
我正在学习如何使用 Visual Basic Express 2008 开发 Windows 窗体应用程序,我的测试/学习应用程序有一个 TabControl 和几个测试页(例如,3 个,这里的数字不相关)。
现在,我正在处理 Tabcontrol 上的 MouseClick 事件,我似乎无法弄清楚如何获取单击了哪个选项卡。我相信如果我单击选项卡条的另一个位置,则不会触发 MouseClick 事件,因此必须单击一个选项卡。问题是,哪个是标签?
任何帮助,将不胜感激。谢谢!
不要使用该MouseClick
事件,因为还有另一个更适合此目的的事件:(
注意:在 OP 发表评论后编辑。)
TabControl
有财产SelectedIndex
。_ 这是当前选定选项卡的从零开始的编号。(还有另一个属性叫做SelectedTab
,直接引用选中的标签页对象。)
您可以将事件处理程序与事件SelectedIndexChanged
挂钩,以便在用户选择另一个选项卡时收到通知:
Private Sub MyTabControl_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyTabControl.SelectedIndexChanged
Dim indexOfSelectedTab As Integer = MyTabControl.SelectedIndex
Dim selectedTab As System.Windows.Forms.TabPage = MyTabControl.SelectedTab
...
End Sub
(请注意,您可能还需要保护您的代码免受SelectedIndex
具有无效值的情况,例如-1
。)
编辑(在OP评论后添加):
如果SelectedIndexChanged
不适合您,因为您需要捕获用户对所有鼠标按钮的操作,您可以使用如下GetTabRect
方法TabControl
:
Private Sub MyTabControl_MouseClick(sender As Object, _
e As System.Windows.Forms.MouseEventArgs) _
Handles MyTabControl.MouseClick
...
For tabIndex As Integer = 0 To MyTabControl.TabCount - 1
If MyTabControl.GetTabRect(tabIndex).Contains(e.Location) Then
... ' clicked on tab with index tabIndex '
End If
Next
...
End Sub
我用来处理这个问题的最简单方法是对每个标签页的事件使用 ENTER 和 LEAVE 事件。例如,我有它,这样当我离开第一页时,它会将我的 datagridview 的可见属性更改为 False,当我输入它时,它会将其转回 True 并为我的表加载数据。
Private Sub TabPage1_Enter(sender As System.Object, e As System.EventArgs) Handles TabPage1.Enter
DataGridView1.Visible = True
Load_Table()
End Sub
Private Sub TabPage1_Leave(sender As System.Object, e As System.EventArgs) Handles TabPage1.Leave
DataGridView1.Visible = False
End Sub
如果您想更改控件上的文本或类似的东西,我想 index 方法将是选择的方式,但只是要知道单击了哪个选项卡,这就是这两个事件的用途。