我正在制作一些游戏,我有很多面板。他们的名字是polje1,polje2,polje3等......对于其中一些人,我需要调用Invalidate()方法来刷新paint事件,问题是我不想使用50 ifs或switch函数。
那么,我可以做一些像("polje" + number).Invalidate();
如果您不理解,请参阅以下代码:
Random rnd = new Random();
private Panel polje1;
private Panel polje2;
private Panel polje3;
private Panel polje4;
private Panel polje5;
private Panel polje6;
private Panel polje7;
private Panel polje8;
private Panel polje9;
private Panel polje10;
definition bla bla bla
...
private void button1_MouseClick(object sender, MouseEventArgs e)
{
int pp = rnd.Next(1,7);
SetCurrentField(pp);
("polje" + pp).Invalidate();
}
Invalidate()方法都不是一个选项,因为表单闪烁!我已经完成了我的课程并执行了DoubleBuffered();
答案 0 :(得分:1)
您可以通过容器的控件集合访问控件的名称属性:
显示ContainsKey函数的示例,以确保集合中存在控件的名称:
Panel polje1 = new Panel() { Name = "polje1" };
this.Controls.Add(polje1);
if (this.Controls.ContainsKey("polje1")) {
this.Controls["polje1"].BackColor = Color.Red;
}