【问题标题】:C# WinForms, Adding tabs to a tab control, then adding a control to each tab programmaticallyC# WinForms,将选项卡添加到选项卡控件,然后以编程方式将控件添加到每个选项卡
【发布时间】:2014-09-03 17:41:33
【问题描述】:

我有一个应该遍历列表的表单,并为列表中的每个项目添加一个选项卡到选项卡控件。然后,我有一个应该添加到每个选项卡的组框。

选项卡添加得很好,但组框仅添加到最后一个选项卡(调试器也显示每个选项卡的控件集合都是空的,除了最后一个选项卡)。

有什么见解吗?

foreach (String company in requiredGasComps)
{
   tabCont.TabPages.Add(company,company);     
}

foreach (TabPage tabpage in tabCont.TabPages)
{
   tabpage.Controls.Add(groupBox);
}


foreach ( TabPage tabpage in tabCont.TabPages)
{
    Control [] a = tabpage.Controls.Find("currentSupplier95",true);

    //Will always find 0 or 1 control
    if (a.Length > 0)
    {
        a[0].Text = tabpage.Text;
    }
}

this.Controls.Add(tabCont); 

【问题讨论】:

  • 是的,当然,一个控件只能有 一个 父级。最后一个获胜。

标签: c# winforms tabs


【解决方案1】:

我认为您在每个 Tabpage 上都放置了相同的 groupBox。试试:

foreach (TabPage tabpage in tabCont.TabPages)
{
   GroupBox groupBox = new GroupBox();
   tabpage.Controls.Add(groupBox);
}

【讨论】:

  • 谢谢,我也在想同样的事情。问题是这个组框包含一个面板和许多标签。我认为最好的方法是创建自己的控件,然后我就可以复制它。
  • 然后使用 foreach 循环将控件放在新的 GroupBox 中
  • GroupBox groupBox1 = new GroupBox(); foreach(groupBox.Controls 中的控件 c) { groupBox1.Add(c); } tabpage.Controls.Add(groupBox1);
【解决方案2】:

一个控件只能属于一个集合,或者 - 换句话说 - 只能有一个父亲。所以你不能将同一个 GroupBox 添加到多个选项卡中,你必须创建不同的 GroupBox 实例,然后将它们添加到选项卡中。

【讨论】:

    【解决方案3】:

    我建议修改你的代码来创建一个标签页来添加,然后你可以同时添加组框

    foreach (String company in requiredGasComps)
    {
        TabPage t = new TabPage(){Name = company, Text = company};
        Groupbox gb = groupBox.CreateNewBasedFromThis();
        t.Controls.Add(gb);
        tabCont.TabPages.Add(t);     
    }
    

    这也会更有效率,因为您不必重复两次

    你也可以创建一个扩展方法来基于旧的创建一个新的分组框

    public static GroupBox CreateNewBasedFromThis(this GroupBox gb)
    {
        var newGb = new GroupBox;
        //set new properties that you wish to copy
        return newGb;
    }
    

    【讨论】:

      【解决方案4】:

      谢谢大家,我最终创建了一个用户控件,然后

      foreach (TabPage tabpage in tabCont.TabPages)
      {
          EnergyTable table = new EnergyTable();
          tabpage.Controls.Add(table);
      }
      

      像魅力一样工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-10
        • 2016-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多