none
如何实现类似拖TabControl控件到窗体默认有两个TabPages功能? RRS feed

  • 问题

  • 当拖TabControl控件到窗体时,默认有两个TabPages。但是却没有找到控件实现添加两个TabPages代码的地方,不知道是触发了什么事件,添加的?
    当控件有类似TabPageCollection的属性时,想要使其在被拖入窗体时默认有两个初始值,如果在控件里对其赋值,无论是在构造、还是在重写OnCreateControl/CreateControlsInstance方法中实现,每一次初始化窗体都会在该属性设计器中添加这个初始值。
    请大家帮帮忙,看一下问题的所在,非常谢谢!
    2009年12月31日 7:17

答案

  • 当拖TabControl控件到窗体时,默认有两个TabPages。但是却没有找到控件实现添加两个TabPages代码的地方,不知道是触发了什么事件,添加的?
    当控件有类似TabPageCollection的属性时,想要使其在被拖入窗体时默认有两个初始值,如果在控件里对其赋值,无论是在构造、还是在重写OnCreateControl/CreateControlsInstance方法中实现,每一次初始化窗体都会在该属性设计器中添加这个初始值。
    请大家帮帮忙,看一下问题的所在,非常谢谢!

    非常感谢大家对本贴的关注!问题已经解决了,参见:
    http://msdn.microsoft.com/zh-cn/library/ms171823.aspx
    • 已标记为答案 柠檬曲 2010年1月7日 8:10
    • 取消答案标记 柠檬曲 2010年1月7日 8:11
    • 已标记为答案 YiChun Chen 2010年1月8日 9:59
    2010年1月7日 8:09

全部回复

  • 你好!
         这两个TabPage是你把TabControl添加到设计器的时候,设计器自动生成的,设计器会生成如下代码:
                this.tabControl1 = new System.Windows.Forms.TabControl();
                this.tabPage1 = new System.Windows.Forms.TabPage();
                this.tabPage2 = new System.Windows.Forms.TabPage();
                this.tabControl1.SuspendLayout();
                this.SuspendLayout();
                //
                // tabControl1
                //
                this.tabControl1.Controls.Add(this.tabPage1);
                this.tabControl1.Controls.Add(this.tabPage2);
                this.tabControl1.Location = new System.Drawing.Point(41, 41);
                this.tabControl1.Name = "tabControl1";
                this.tabControl1.SelectedIndex = 0;
                this.tabControl1.Size = new System.Drawing.Size(200, 100);
                this.tabControl1.TabIndex = 0;
                //
                // tabPage1
                //
                this.tabPage1.Location = new System.Drawing.Point(4, 21);
                this.tabPage1.Name = "tabPage1";
                this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
                this.tabPage1.Size = new System.Drawing.Size(192, 75);
                this.tabPage1.TabIndex = 0;
                this.tabPage1.Text = "tabPage1";
                this.tabPage1.UseVisualStyleBackColor = true;
                //
                // tabPage2
                //
                this.tabPage2.Location = new System.Drawing.Point(4, 21);
                this.tabPage2.Name = "tabPage2";
                this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
                this.tabPage2.Size = new System.Drawing.Size(192, 75);
                this.tabPage2.TabIndex = 1;
                this.tabPage2.Text = "tabPage2";
                this.tabPage2.UseVisualStyleBackColor = true;

    这个添加TabPage1和TabPage的行为是在TabControl构造和初始化以后了,所以你在继承TabControl的控件定义中也没有办法去掉!这个是窗体设计器的行为,不是很容易修改!

    周雪峰
    • 已标记为答案 YiChun Chen 2010年1月4日 11:05
    • 取消答案标记 柠檬曲 2010年1月7日 8:10
    • 已标记为答案 柠檬曲 2010年1月7日 8:10
    • 取消答案标记 柠檬曲 2010年1月7日 8:10
    2009年12月31日 8:22
    版主
  • 当拖TabControl控件到窗体时,默认有两个TabPages。但是却没有找到控件实现添加两个TabPages代码的地方,不知道是触发了什么事件,添加的?
    当控件有类似TabPageCollection的属性时,想要使其在被拖入窗体时默认有两个初始值,如果在控件里对其赋值,无论是在构造、还是在重写OnCreateControl/CreateControlsInstance方法中实现,每一次初始化窗体都会在该属性设计器中添加这个初始值。
    请大家帮帮忙,看一下问题的所在,非常谢谢!

    非常感谢大家对本贴的关注!问题已经解决了,参见:
    http://msdn.microsoft.com/zh-cn/library/ms171823.aspx
    • 已标记为答案 柠檬曲 2010年1月7日 8:10
    • 取消答案标记 柠檬曲 2010年1月7日 8:11
    • 已标记为答案 YiChun Chen 2010年1月8日 9:59
    2010年1月7日 8:09
  • 感谢分享啊!
    周雪峰
    2010年1月7日 10:03
    版主