【问题标题】:Accessing panels with similar names访问具有相似名称的面板
【发布时间】:2014-04-10 21:18:30
【问题描述】:

我正在制作一些有很多面板的游戏。它们的名字是 polje1、polje2、polje3 等……对于其中一些,我需要调用 Invalidate() 方法来刷新绘制事件,问题是我不想使用 50 个 if 或 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();

【问题讨论】:

  • 谢谢哥们,这正是我需要的!

标签: c# winforms names panels


【解决方案1】:

您可以通过容器的控件集合通过其名称属性访问控件:

显示 ContainsKey 函数以确保控件名称确实存在于集合中的示例:

Panel polje1 = new Panel() { Name = "polje1" };
this.Controls.Add(polje1);
if (this.Controls.ContainsKey("polje1")) {
  this.Controls["polje1"].BackColor = Color.Red;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    相关资源
    最近更新 更多