我在运行时创建了一个标签数组。现在我有问题从其他功能访问这些标签。
动态创作:
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;
}
有人有想法吗?
答案 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";
}