我有一个三TabPages的TabPages。应用程序的初始启动总是左侧的第一个TabPage。对我来说,有必要设置启动TabPage (例如,第二个)。
当然,我知道更改start选项卡的可能性如下:
tabControl.SelectedTab = tabPage;
tabControl.SelectTab(tabPage);
...但是这段代码也会激活额外的事件,比如TabControl.Selecting、TabControl.Deselecting、TabControl.SelectedIndexChanged等等--我真的很想预先阻止这种情况。
我正在寻找的是TabControl中的某种属性,如"StartingTabPageIndex“--将其设置为1将在开始时打开第二个TabPage,而不会调用任何不必要的事件。
发布于 2016-03-04 08:58:55
应该从设计器中删除与事件处理程序的绑定,并在设置初始选项卡页后添加它们。
在设计器中删除它们之后(这不会删除事件处理程序代码),在设置所需的tabpage之后,在表单加载事件中重新绑定事件处理程序
tabControl.SelectedTab = tabPage;
tabControl.Selected += tabControl_Selected;
.... and so on for the other events to handle....发布于 2016-03-04 17:13:07
另一种选择。进入表单设计器,将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进行任何修改似乎不会影响该属性。以这种方式改变它似乎是安全的。
发布于 2016-03-04 09:13:34
更新
我刚刚做了一个简单的测试,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作为初始。
我还没有测试过这个,但是理论上说它应该有效:-)
https://stackoverflow.com/questions/35791636
复制相似问题