所以我试图通过我的代码反复创建相同的控件(在本例中是一个面板)。我可以使用这段代码
来做到这一点 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变量放在函数之外来解决此问题。这根本不起作用。它可以创建一个面板,但是当我第二次按下它时它会移除第一个面板并创建第二个面板。这是一个问题,因为我想保留第一个面板。我该怎么做?
答案 0 :(得分:1)
只需在Method之外创建一个公共列表,并将其末尾的Panel添加到该列表中。您将始终能够访问您创建的所有Panel。
public List<Panel> ExistingSelfMadePanel { get; set;}
private void CreateControls()
{
//your code
this.ExistingSelfMadePanel.Add(PNL_1);
}
编辑:我不知道你对这样的属性有多远,但不要忘记初始化List!
this.ExistinSelfMadePanel = new List<Panel>();
否则会出现空引用异常。刚进入我的脑海。 :)
编辑II:
以下是来自MSDN的关于通用列表的“小”Documentation。将显示如何存储和访问您存储在其中的项目。仔细阅读,您将能够访问所需的面板。另外,我认为你错了我们。要操作现有Panel,请在List的帮助下加载想要的面板。像这样:
foreach (Panel tmpPanel in Form1.ActiveForm.Controls)
{
if(tmpPanel.Name == this.ExistingSelfMadePanel.FirstOrDefault(p => p.Name == "PNL_1").Name)
{
tmpPanel.ForeColor = Color.Aquamarine;
break;
}
}