如何在启动时设置TabPage?

时间:2016-03-04 08:50:22

标签: c# winforms tabcontrol

我有一个带有三个TabPages的TabControl。应用程序的初始启动始终打开左侧的第一个TabPage。对我来说,有必要设置起始TabPage(例如第二个)。

当然,我知道在开始时更改标签的可能性如下:

tabControl.SelectedTab = tabPage;
tabControl.SelectTab(tabPage);
...

但是这段代码还会激活其他事件,如TabControl.Selecting,TabControl.Deselecting,TabControl.SelectedIndexChanged等。 - 我真的想提前阻止它。

我正在寻找的是TabControl中的某种属性,如" StartingTabPageIndex" - 将其设置为1将在启动时打开第二个TabPage而不调用任何不必要的事件。

3 个答案:

答案 0 :(得分:1)

您应该从设计器中删除与事件处理程序的绑定,并在设置初始标签页后添加它们

在设计器中删除它们之后(这不会删除事件处理程序代码)在设置所需的标签页后重新绑定表单加载事件中的事件处理程序

 tabControl.SelectedTab = tabPage;
 tabControl.Selected += tabControl_Selected;
 .... and so on for the other events to handle....

答案 1 :(得分:1)

另一种选择。进入表单设计器,将SelectedIndex属性从0更改为1:

// 
// tabControl1
// 
this.tabControl1.Controls.Add(this.tabPage1);
this.tabControl1.Controls.Add(this.tabPage2);
this.tabControl1.Controls.Add(this.tabPage3);
this.tabControl1.Location = new System.Drawing.Point(223, 21);
this.tabControl1.Name = "tabControl1";
this.tabControl1.SelectedIndex = 1;      //  <--   This Line
this.tabControl1.Size = new System.Drawing.Size(300, 143);
this.tabControl1.TabIndex = 3;

事件处理程序尚未连接,并且对设计器中的TabControl进行任何修改似乎都不会影响该属性。以这种方式改变它似乎

答案 2 :(得分:0)

更新

我刚做了一个简单的测试,SelectedTab不起作用,因为它希望在set上创建句柄。

然而,这似乎有效:

public class MyTabControl : TabControl
{
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
    [Browsable(true)]
    public new int SelectedIndex
    {
        get { return base.SelectedIndex; }
        set { base.SelectedIndex = value; }
    }
}

您现在可以在设计器中看到SelectedIndex并可以设置它。它不会更改设计器中的可见选项卡,但会存储“初始选项卡索引”(从零开始)。

它会更改SelectedIndex,但它不会调用事件,因为事件是在设计器的序列化中最后分配的,因此在更改之前永远不会分配事件。

一个选项是将SelectedTab序列化。您只需要从TabControl派生自己的自定义TabControl,并具有以下内容:

public class MyTabControl : TabControl
{
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  public new TabPage SelectedTab {
    get { return base.SelectedTab;  }
    set { base.SelectedTab = value; }
  }
}

通过这种方式,您可以将设计师选为SelectedTab作为初始设置。

我没有对此进行过测试,但理论认为它应该可行: - )

相关问题