Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 如何用代码生成多个控件_C#_Winforms_Visual Studio_Visual Studio 2015 - Fatal编程技术网

C# 如何用代码生成多个控件

C# 如何用代码生成多个控件,c#,winforms,visual-studio,visual-studio-2015,C#,Winforms,Visual Studio,Visual Studio 2015,所以我试图通过我的代码一次又一次地创建相同的控件(在本例中是一个面板)。我可以通过使用这段代码来实现这一点 int i; int PNL_1_Loc = -70; private void CreateControls() { Panel PNL_1 = new Panel(); i = i + 1; PNL_1_Loc= PNL_1_Loc+ 70; PNL_1.Location = new

所以我试图通过我的代码一次又一次地创建相同的控件(在本例中是一个面板)。我可以通过使用这段代码来实现这一点

    int i;
    int PNL_1_Loc = -70;

    private void CreateControls()
    {
        Panel PNL_1 = new Panel();

        i = i + 1;

        PNL_1_Loc= PNL_1_Loc+ 70;
        PNL_1.Location = new Point(0, PNL_1_Loc);
        PNL_1.Name = "PNL_1_" + i.ToString();

        PNL_1.Width = 1052;
        PNL_1.Height = 60;
        PNL_1.BackColor = Color.FromArgb(222, 222, 222);
   }
每次调用此函数时,它都会创建一个名为PNL_1_(面板编号)的面板。问题是我想在创建PNL_1变量的函数之外访问它


我试图通过将PNL_1变量放在函数外部来解决这个问题。这根本不起作用。它可以创建一个面板,但当我第二次按下按钮时,它会删除第一个面板并创建第二个面板。这是一个问题,因为我想保留第一个面板。如何做到这一点?

只需在方法之外创建一个公共列表,并将其末尾的面板添加到该列表中。您将始终能够访问您创建的所有面板

public List<Panel> ExistingSelfMadePanel { get; set;}

private void CreateControls()
{
    //your code
    this.ExistingSelfMadePanel.Add(PNL_1);
}

将每个新面板添加到。仅添加一项时,应使用
Add()
而不是
AddRange()
。@VisualIncent是的,正确。但如果我这么做,我就不会调试了。。。奇怪的编辑:Sry你是对的:)我尝试此操作时出错:严重性代码描述项目文件行抑制状态错误CS1503参数1:无法从“System.Windows.Forms.Panel”转换为“System.Collections.Generic.IEnumerable”toDoPlanner E:\Projects\Apps\toDoPlanner\toDoPlanner\Form1.cs 59Active@unknown:使用
Add()
而不是
AddRange()
。查看更新的答案。是的,我这样做了,但我仍然无法在方法之外访问我的PNL_1
foreach (Panel tmpPanel in Form1.ActiveForm.Controls)
{
  if(tmpPanel.Name == this.ExistingSelfMadePanel.FirstOrDefault(p => p.Name == "PNL_1").Name)
  {
     tmpPanel.ForeColor = Color.Aquamarine;
     break;
  }
}