我正在学习如何使用Visual Basic Express 2008开发Windows窗体应用程序,我的测试/学习应用程序有一个带有几个测试页面的TabControl(例如,3,这里的数字不相关)。
现在,我在Tabcontrol上处理MouseClick事件,我似乎无法弄清楚如何获取单击的选项卡。 我相信如果单击选项卡条的另一个位置,则不会触发MouseClick事件,因此必须单击一个选项卡。问题是,哪个是标签?
任何帮助将不胜感激。谢谢!
答案 0 :(得分:15)
不要使用 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
答案 1 :(得分:2)
我用来处理这个问题的最简单方法是对每个标签页的事件使用ENTER和LEAVE事件。例如,我有它,所以当我离开第一页时,它将visible属性更改为我的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
如果你想更改控件上的文本或类似的东西,我想索引方法将是选择的方式,但只是知道点击哪个选项卡是这两个事件的用途。