在C#中为选项卡页创建一个事件

本文关键字:事件 一个 创建 选项 | 更新日期: 2023-09-27 18:27:38

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

tabPage1,
选项卡第2页,
选项卡第3页,

属于

tabControl1,

我需要代码:

  1. 每个选项卡页有三个独立的事件处理程序
  2. 有一个事件处理程序,在事件处理程序内部有代码可以确定当前所选的选项卡页(例如某种case语句)

到目前为止,我已经看了几个例子,但似乎没有一个能满足我的需要。如何创建此事件/这些事件?

在C#中为选项卡页创建一个事件

可能是这样的:

使用TabControl.选定的

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{
   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}

这样?

private void tabControl1_Selected(object sender, TabControlEventArgs e)
{
    MessageBox.Show("Current Tab: " + tabControl1.SelectedTab.Text);
}

另一个解决方案是将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();
}

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

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

这帮了我一把:

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);
}