首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何启动TabPage?

如何启动TabPage?
EN

Stack Overflow用户
提问于 2016-03-04 08:50:21
回答 3查看 4.7K关注 0票数 2

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

当然,我知道更改start选项卡的可能性如下:

代码语言:javascript
复制
tabControl.SelectedTab = tabPage;
tabControl.SelectTab(tabPage);
...

但是这段代码也会激活额外的事件,比如TabControl.Selecting、TabControl.Deselecting、TabControl.SelectedIndexChanged等等--我真的很想预先阻止这种情况。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-04 08:58:55

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

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

代码语言:javascript
复制
 tabControl.SelectedTab = tabPage;
 tabControl.Selected += tabControl_Selected;
 .... and so on for the other events to handle....
票数 0
EN

Stack Overflow用户

发布于 2016-03-04 17:13:07

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

代码语言:javascript
复制
// 
// 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进行任何修改似乎不会影响该属性。以这种方式改变它似乎是安全的。

票数 5
EN

Stack Overflow用户

发布于 2016-03-04 09:13:34

更新

我刚刚做了一个简单的测试,SelectedTab没有工作,因为它期望在set上创建句柄。

然而,这似乎是可行的:

代码语言:javascript
复制
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,并具有如下内容:

代码语言:javascript
复制
public class MyTabControl : TabControl
{
  [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
  public new TabPage SelectedTab {
    get { return base.SelectedTab;  }
    set { base.SelectedTab = value; }
  }
}

这样,您将获得您的设计人员选择SelectedTab作为初始。

我还没有测试过这个,但是理论上说它应该有效:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35791636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档