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;
}
}