Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在windows窗体中使用for循环在拆分容器中添加控件_C#_Winforms - Fatal编程技术网

C# 如何在windows窗体中使用for循环在拆分容器中添加控件

C# 如何在windows窗体中使用for循环在拆分容器中添加控件,c#,winforms,C#,Winforms,我正在开发一个windows应用程序,其中包含3个拆分容器(每个容器有两个面板, 共6个面板)。 现在我想在每个面板中动态添加3个标签。我尝试使用一个解决方案for循环并访问所有splitcontainer及其面板,但我不知道如何使用for循环访问splitcontainer。 我可以用for loop来做这个吗?我还想同时向所有面板(6)添加控件。如何做到这一点。 提前谢谢。。!! 这就是我所做的 foreach (SplitContainer sp in this.Controls)

我正在开发一个windows应用程序,其中包含3个拆分容器(每个容器有两个面板, 共6个面板)。 现在我想在每个面板中动态添加3个标签。我尝试使用一个解决方案for循环并访问所有splitcontainer及其面板,但我不知道如何使用for循环访问splitcontainer。 我可以用for loop来做这个吗?我还想同时向所有面板(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);
        }

尝试使用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;
}
foreach(this.Controls.OfType()中的SplitContainer sp)
{
标签标题=MakeLabel(“单击”,新点(10,10);
sp.Panel1.控件。添加(标题);
标签标题1=MakeLabel(“一键点击”,新点(10,10);
sp.Panel2.控件添加(标题1);
}
专用标签MakeLabel(字符串标题、点位置)
{
标签lbl=新标签();
lbl.Text=标题;
位置=位置;
lbl.可见=真;
返回lbl;
}
编辑
Steve,您向panel1和panel2添加了相同的标签。我在panel2的add方法中修复了变量名。

我使用了与Steve相同的方法,但我使用
TableLayoutPanel
存储所有拆分容器,因为您可以使用
Dockstyle.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;
    }
private void Form1\u加载(对象发送方,事件参数e)
{
foreach(此.tableLayoutPanel1.Controls.OfType()中的拆分容器sc)
{
标签标题=MakeLabel(“单击”,新点(10,10));
sc.Panel1.控件。添加(标题);
标签标题1=MakeLabel(“双击”,新点(10,10));
sc.Panel2.控件添加(标题1);
}
}
专用标签MakeLabel(字符串标题、点位置)
{
标签lbl=新标签();
lbl.Text=标题;
位置=位置;
lbl.可见=真;
返回lbl;
}

如图所示,解决方案非常有效:

但是当我尝试将TiletTitle文本添加到panel 2时,TiletTitle 2文本会重叠,尽管我更改了其位置。我已经解决了这个问题,方法是使用一个包含总共6个面板的SplitterPanel数组,然后在forloop中为每个面板添加控件。还有其他方法吗?谢谢,但是无法工作。控件未添加到面板1中。我已通过使用一个包含总共6个面板的SplitterPanel数组解决了此问题,然后在forloop中将控件添加到每个面板中。是否有其他方法可以做到这一点?请提供更多详细信息。您将splitcontainers存储在哪里?直接存储在窗体上还是容器中?别忘了如果有助于您解决问题,则将答案标记为已接受。这可以帮助其他用户解决相关问题。谢谢。
    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;
    }