我正在制作一个事件来检查选项卡控件中的特定选项卡页是否处于活动状态。
关键是,如果选项卡控件中的该选项卡页是当前选定的选项卡,它将触发一个事件。有什么代码可以满足我的需要吗?
我正在制作一个事件来检查选项卡控件中的特定选项卡页是否处于活动状态。
关键是,如果选项卡控件中的该选项卡页是当前选定的选项卡,它将触发一个事件。有什么代码可以满足我的需要吗?
假设您在 Winform 中查看,则SelectedIndexChanged
该选项卡有一个事件
现在,您可以在其中检查您的特定选项卡并继续执行逻辑
private void tab1_SelectedIndexChanged(object sender, EventArgs e)
{
if (tab1.SelectedTab == tab1.TabPages["tabname"])//your specific tabname
{
// your stuff
}
}
检查特定标签页是否是标签控件的当前选定页面很容易;只需使用选项卡控件的 SelectedTab 属性:
if (tabControl1.SelectedTab == someTabPage)
{
// Do stuff here...
}
如果代码是基于某个事件而不是被选择的标签页执行的,这将更有用(在这种情况下 SelectedIndexChanged 将是一个更好的选择)。
例如,我有一个应用程序使用计时器通过 TCP/IP 连接定期轮询内容,但为了避免不必要的 TCP/IP 流量,我只轮询更新当前所选标签页中的 GUI 控件的内容。
在 .Net 4 中可以使用
if (tabControl1.Controls[5] == tabControl1.SelectedTab)
MessageBox.Show("Tab 5 Is Selected");
或者
if ( tabpage5 == tabControl1.SelectedTab)
MessageBox.Show("Tab 5 Is Selected");
无论出于何种原因,上述内容都不适合我。这是这样做的:
if (tabControl.SelectedTab.Name == "tabName" )
{
.. do stuff
}
其中 tabControl.SelectedTab.Name 是在 tabcontrol 本身中分配给页面的名称属性。
我认为使用事件tabPage1.Enter
更方便。
tabPage1.Enter += new System.EventHandler(tabPage1_Enter);
private void tabPage1_Enter(object sender, EventArgs e)
{
MessageBox.Show("you entered tabPage1");
}
当您对不同的选项卡有不同的逻辑时,这比嵌套 if-else 语句要好。并且更适合将来可能添加新标签的情况。
请注意,如果表单加载并tabPage1
默认打开,则会触发此事件。
这也可以工作。
if (tabControl.SelectedTab.Text == "tabText" )
{
.. do stuff
}