0

我正在用 C# Windows 窗体开发一个应用程序,我想根据是否选择了选项卡控件的特定选项卡页来创建一个事件处理程序/事件处理程序。例如,如果我有三个标签页:

tabPage1,
tabPage2,
tabPage3,

属于

选项卡控件1,

我需要以下代码:

  1. 每个标签页都有三个单独的事件处理程序
  2. 有一个事件处理程序,并且在事件处理程序内部有代码可以确定当前选择的标签页(例如某种案例语句)

到目前为止,我已经查看了几个示例,但似乎没有一个可以满足我的需要。我怎样才能创建这个事件/这些事件?

4

5 回答 5

4

可能是这样的:

使用TabControl.Selected

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{

   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}
于 2012-03-11T20:10:38.817 回答
1

像这样?

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    MessageBox.Show("Current Tab: " + tabControl1.SelectedTab.Text);
}
于 2012-03-11T20:07:08.267 回答
0

这帮助了我:

private void tabControl1_Selected(Object sender, TabControlEventArgs e)
{
    // Could be initialized in "Form_Load"
    var validTabPages = new[]
    {
        tabPage1,
        tabPage2,
        tabPage3,
        tabPage4
    };

    // If not a valid TabPage, just return
    if (!validTabPages.Contains(e.TabPage))
        return;

    pictureBox2.Parent.Controls.Remove(pictureBox2);
    pictureBox5.Parent.Controls.Remove(pictureBox5);

    e.TabPage.Controls.Add(pictureBox2);
    e.TabPage.Controls.Add(pictureBox5);
}
于 2012-03-11T20:06:05.630 回答
0

另一种解决方案是子类化TabPage

class MyTabPage : TabPage {
    event EventHandler Activated;

    public void OnActivated() {
        if (Activated != null)
           Activated(this, EventArgs.Empty);
    }
}

void HandleTabIndexChanged(object sender, EventArgs args) {
    var tabControl = sender as TabControl;
    var tabPage = tabControl.SelectedTab as MyTabPage;
    if (tabPage != null)
        tabPage.OnActivated();
}
于 2012-03-11T20:42:46.283 回答
0

您应该在选项卡页的子控件上查找 VisibleChanged 事件。将为标签页中的所有子控件触发此事件。

当您在每个页面上放置一个 CustomControl 时,这非常有用。然后您可以在 VisibleChanged 被触发时更新 CustomControl。

于 2012-03-11T20:52:00.187 回答