如何访问动态创建的标签数组

时间:2012-09-08 21:30:09

标签: c# arrays dynamic

我在运行时创建了一个标签数组。现在我有问题从其他功能访问这些标签。

动态创作:

private void Form1_Shown(object sender, EventArgs e)
{
    Label[] Calendar_Weekday_Day = new Label[7];
    for (int i = 0; i < 7; i++)
    {
        Calendar_Weekday_Day[i] = new Label();
        Calendar_Weekday_Day[i].Location = 
                                    new System.Drawing.Point(27 + (i * 137), 60);
        Calendar_Weekday_Day[i].Size = new System.Drawing.Size(132, 14);
        Calendar_Weekday_Day[i].Text = "Montag, 01.01.1970";
        this.TabControl1.Controls.Add(Calendar_Weekday_Day[i]);
    }
}

我想要访问动态创建的标签数组的函数:

private void display_weather_from_db(DateTime Weather_Startdate)
{
    Calendar_Weekday_Day[0].Text = "Test1";
    Calendar_Weekday_Day[1].Text = "Test2";
}

显示错误:

  

当前名称“Calendar_Weekday_Day”不存在   context Form1.cs 1523 25测试

我试过这个,但没有帮助:(

public partial class Form1 : Form
{
    private Label[] Calendar_Weekday_Day;
}

有人有想法吗?

4 个答案:

答案 0 :(得分:3)

我想你只需要

Calendar_Weekday_Day = new Label[7];

而不是

Label[] Calendar_Weekday_Day = new Label[7];

Form_Shown中。正如现在所写的那样,您将列表存储在局部变量而不是实例字段中。

答案 1 :(得分:0)

问题很可能是范围或缺乏初始化。 Calendar_Weekday_Day仅存在于Form1_Shown上下文中。如果你试图从另一种方法访问它,你将无法看到它(当它是私有的时,它仍然没有初始化为添加新元素将是有问题的)。您有两种选择:

  • 更改范围(在表单的类中创建Calendar_Weekday_Day私有属性,不要忘记初始化它)
  • 访问this.TabControl1.Controls
  • 搜索控件

您最好使用private IEnumerable<Label> Calendar_WeekendDay或甚至IList<Label>来提高您以后访问控件的灵活性。

答案 2 :(得分:0)

删除重新声明

private void Form1_Shown(object sender, EventArgs e)
{
    Calendar_Weekday_Day = new Label[7]; // removed Label[] 

......其余的是相同的

这将是所需的最小变化,但您应该注意编译器警告。它很可能会警告你,你重新宣布了场地。

答案 3 :(得分:0)

如果tabcontrol只包含标签,那么

 private void display_weather_from_db(DateTime Weather_Startdate)
 {
 Label[] Calendar_Weekday_Day = this.TabControl1.Controls.OfType<Label>().ToArray();

 Calendar_Weekday_Day[0].Text = "Test1";
 Calendar_Weekday_Day[1].Text = "Test2";

 }

如果还有其他标签需要过滤,那么首先

  for .....
   ... _Day[i].Size = new System.Drawing.Size(132, 14);
    Calendar_Weekday_Day[i].Text = "Montag, 01.01.1970";
    Calendar_Weekday_Day[i].Tag= "Weather";// specify your label tag
    this.TabControl1.Controls.Add(Calendar_Weekday_Day[i]);
  ....

然后

 private void display_weather_from_db(DateTime Weather_Startdate)
 {
 Label[] Calendar_Weekday_Day = this.TabControl1.Controls.OfType<Label>().Where(X=>X.Tag!=null && X.Tag=="Weather").ToArray();


 Calendar_Weekday_Day[0].Text = "Test1";
 Calendar_Weekday_Day[1].Text = "Test2";

 }