【问题标题】:How to add controls in split container using for loop in windows form如何在 Windows 窗体中使用 for 循环在拆分容器中添加控件
【发布时间】:2012-08-28 14:47:08
【问题描述】:

我正在开发一个包含 3 个拆分容器(每个两个面板, 共 6 个面板)。 现在我想在每个面板中动态添加 3 个标签。我正在尝试使用 for 循环并访问所有拆分容器及其面板的解决方案,但我不知道如何使用 for 循环来访问拆分容器。 我可以为此使用for循环吗?我还想同时向所有面板(6)添加控件。这该怎么做。 提前致谢..!! 这就是我所做的......

foreach (SplitContainer sp in this.Controls)
        {          
            Label tileTitle = new Label();
            tileTitle.Text = "OneClick";
            tileTitle.Visible = true;
            tileTitle.Location = new Point(10, 10);
            sp.Panel1.Controls.Add(tileTitle);
        }

【问题讨论】:

  • 更多细节,请。你在哪里存储你的拆分容器?直接在表单上还是在容器中?

标签: c# winforms


【解决方案1】:
foreach (Control c in this.Controls)
{
    if (c is SplitContainer)
    {
        Label tileTitle = new Label();
        tileTitle.Text = "OneClick";
        tileTitle.Visible = true;
        tileTitle.Location = new Point(10, 10);

        Label tileTitle2 = new Label();
        tileTitle2.Text = "OneClick";
        tileTitle2.Visible = true;
        tileTitle2.Location = new Point(10, 10);

        ((SplitContainer)c).Panel1.Controls.Add(tileTitle);
        ((SplitContainer)c).Panel2.Controls.Add((tileTitle2));
    }
}

【讨论】:

  • 但是当我尝试将 titeTitle 文本添加到面板 2 时,虽然我更改了它的位置,但 tileTitle2 文本却重叠了。我通过采用一组包含总共 6 个面板的 splitterPanel 解决了这个问题,然后在 forloop 中为每个面板添加了控件。有没有其他方法可以做到这一点?
【解决方案2】:

尝试使用 Controls.OfType 扩展,只获取 SplitContainer 类型的控件

foreach (SplitContainer sp in this.Controls.OfType<SplitContainer>())
{
    Label title = MakeLabel("OneClick", new Point(10, 10);
    sp.Panel1.Controls.Add(title);
    Label title1 = MakeLabel("OneClick", new Point(10, 10);
    sp.Panel2.Controls.Add(title1);
}

private Label MakeLabel(string caption, Point position)
{
    Label lbl = new Label();   
    lbl.Text = caption;   
    lbl.Location = position;   
    lbl.Visible = true;   
    return lbl;
}

编辑 史蒂夫,你给 panel1 和 panel2 添加了相同的标签。我在 panel2 的 add 方法中修复了变量名。

【讨论】:

  • 谢谢,但这不起作用。控件未添加到面板一中。我通过采用一组包含总共 6 个面板的 splitterPanel 解决了这个问题,然后在 forloop 中为每个面板添加了控件。有没有其他方法可以做到这一点?
【解决方案3】:

我以与史蒂夫相同的方式完成此操作,但我使用TableLayoutPanel 来存储所有拆分容器,因为您可以同时添加多个SplitContainerDockstyle.Fill

    private void Form1_Load(object sender, EventArgs e)
    {
        foreach (SplitContainer sc in this.tableLayoutPanel1.Controls.OfType<SplitContainer>())
        {
            Label title = MakeLabel("OneClick", new Point(10, 10));
            sc.Panel1.Controls.Add(title);
            Label title1 = MakeLabel("TwoClick", new Point(10, 10));
            sc.Panel2.Controls.Add(title1);
        }
    }

    private Label MakeLabel(string caption, Point position)
    {
        Label lbl = new Label();
        lbl.Text = caption;
        lbl.Location = position;
        lbl.Visible = true;
        return lbl;
    }

该解决方案完美运行,如下所示:http://imageshack.us/photo/my-images/838/splitcontainer.png/

【讨论】:

  • 不要忘记将答案标记为已接受,如果它可以帮助您解决它。可以帮助其他用户解决相关问题。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多