【问题标题】:how to iterate Button variables如何迭代按钮变量
【发布时间】:2010-12-02 06:45:23
【问题描述】:

我有 16 个按钮,分别命名为 button1、button2... 等 迭代它们的最佳方法是什么,我需要如何将这些按钮存储在(在数组或其他东西中)?我想做如下的事情:

public void func(string[] a)
{
     for(int i = 0; i<16;i++)
     {
          if(a[i]==something)
              button[i].image = someImage;
          else
              button[i].image = antoherImage;
     }
}

【问题讨论】:

  • 您正在使用字符串数组 (a[]) 中的值来确定按钮数组 (button[]) 中的图像。 a[] 和 button[] 有什么关系?
  • 我写了这个作为例子。没有字符串数组。事实上,我检查了数据库中的一些值。

标签: c# asp.net user-interface button


【解决方案1】:

坦率地说,最好的办法是不要从 16 个不同的变量开始。相反,有一个数组:

Button[] buttons = new Button[16];

然后您可以使用您想要的语法(以属性名称为模)。缺点是设计师并没有真正满足这一点。通常我发现如果我需要大量相同类型的 UI 元素,以编程方式创建它们比在设计器中更容易,但这取决于具体情况。

另一种选择是使用Controls["button" + (i + 1)],但是当您真的只想要一个数组时,这对我来说有点像黑客攻击。如果您不需要重新分配变量,可以使用:

Button[] buttons = new Button[16];
for (int i = 0; i < 16; i++)
{
    buttons[i] = (Button) Controls["button" + (i + 1)];
}

从那时起,您可以使用buttons 数组...

当然你也可以这样做:

Button[] buttons = { button1, button2, button3, button4, button5, ... };

【讨论】:

  • 感谢您的回复。我的按钮是一个窗口形式,它们中的每一个都是像不同的对象一样创建的。如何将它们添加到数组中?
  • @EEE:为什么要单独创建它们才能开始?如果您可以从数组开始,那可能是最好的选择。
  • 我认为使用“Controls["button" + (i + 1)]" 是我想要的。我不知道如何达到这样的控制。非常感谢。
【解决方案2】:

您可以通过使用容器的 Controls()-Collection 轻松做到这一点:

foreach(Control ctrl in Me.Controls()) {
    if(ctrl.Name.Startswith("Button")) {
        //do something
    }
}

从这里您可以访问容器中的每个控件,也可以将其转换为不同的类型,从而检查您的状况。

鲍比

【讨论】:

    猜你喜欢
    • 2022-11-10
    • 2020-01-16
    • 1970-01-01
    • 2020-10-04
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2014-08-23
    相关资源
    最近更新 更多