【问题标题】:Create an event for tab pages in C#在 C# 中为标签页创建事件
【发布时间】:2012-03-11 19:59:50
【问题描述】:

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

tabPage1,
tabPage2,
标签页3,

属于

tabControl1,

我需要以下代码:

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

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

【问题讨论】:

  • 你也可以使用输入的事件。取得了相当大的成功

标签: c# winforms tabcontrol tabpage


【解决方案1】:

可能是这样的:

利用TabControl.Selected

private void tabControl1_Selected(Object sender, TabControlEventArgs e) 
{

   if(e.TabPage == tabPage1) 
     DoSomethingInRelationOfTab1();
   else if(e.TabPage == tabPage2)
     DoSomethingInRelationOfTab2();
   ....
   ....
}

【讨论】:

  • 我在尝试此代码时遇到以下错误 'App.Form1.tabPage1' is a 'field' but is used like a 'type' 而不是使用 if(e.TabPage is tabPage1) I试过 if(e.TabPage == tabPage1) 但没用
  • "(e.TabPage 是 tabPage1)" 切换 "e.TabPage" 和 "tabPage1"
  • @user1224504:我将答案更正为==。什么不适用于该模式?
【解决方案2】:

像这样?

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

【讨论】:

    【解决方案3】:

    另一种解决方案是继承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();
    }
    

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        这对我有帮助:

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

        【讨论】:

        • 你可以把它和@Tigran 的例子结合起来
        • 我不太明白这段代码是如何工作的,因此我不确定如何在我的应用程序中测试它(我对 C# 编程比较陌生)。如果可能的话,代码可以多加注释吗?
        • @Tigran @mo。这是我尝试过的,但是当我单击标签页时,图片框并没有从一个标签移动到下一个。 (我知道它有效,因为我在按钮单击事件上尝试了代码)` private void tabControl1_Selected(Object sender, TabControlEventArgs e) { if(e.TabPage == tabPage1) { this.tabPage2.Controls.Add(this.pictureBox5) ; } else if (e.TabPage == tabPage2) { this.tabPage2.Controls.Add(this.pictureBox5); } }`
        • 很抱歉,如果我理解的有点慢,但我仍然不确定如何将您的代码集成到应用程序中。这些功能中的每一个都去哪里了?这段代码看起来经过深思熟虑,但对我来说也很陌生:/。如果可以的话,请提供帮助......任何类型的解释都指向我如何设置此代码的方向将不胜感激。
        • 好的,你想给当前选中的标签页添加一个图片框吗?
        猜你喜欢
        • 1970-01-01
        • 2015-09-19
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-23
        相关资源
        最近更新 更多