如何使用代码

时间:2017-01-06 12:05:35

标签: 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 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变量放在函数之外来解决此问题。这根本不起作用。它可以创建一个面板,但是当我第二次按下它时它会移除第一个面板并创建第二个面板。这是一个问题,因为我想保留第一个面板。我该怎么做?

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