【问题标题】:Flling a two-dimensional array with buttons用按钮归档一个二维数组
【发布时间】:2024-05-03 23:45:02
【问题描述】:

我这里有个小问题。我有一个 [5,5] 大的二维数组。 我有一个带有 25 个按钮的窗体。现在我想将按钮存储在对象数组中,但我的问题是,我如何告诉程序知道将哪个按钮放入数组中?是否有可能以某种方式:

//_array[i] = button(i);

这是我第一次将对象存储在数组中,我不知道该怎么做。

编辑:按钮具有所有标准名称 (button1,button,button3...)

EDIT2:我知道如何手动操作(_array[x,y] = button1),但我想知道如何使用 for 循环。

【问题讨论】:

    标签: c# arrays winforms button


    【解决方案1】:

    您可以使用IEnumerable.OfType() 过滤控件:

    //get all buttons and order them by name
    var buttons = Controls.OfType<Button>().OrderBy(x => x.Name).ToList();
    
    for(int i = 0; i < 5; i++)
       for(int j = 0; j < 5; j++)
            _array[i, j] = buttons[i*5+j];
    

    【讨论】:

    • "= 按钮[i*5+j];"给我这个错误:无法使用 [] 将索引应用到类型为 'System.Linq.IOrderedEnumerable' 的表达式
    【解决方案2】:

    您可以使用按钮名称作为Controls 集合的索引来访问按钮:

    for (int i = 0; i < 5; i++) {
        for (int k = 0; k < 5; k++) {
            _array[i, k] = Controls["Button" + (5 * i + k + 1).ToString()];
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个:

      for (int i=0; i<5; i++)
      for (int j=0; j<5; j++)
        _array[i,j] = Controls.Item["Button" + (i*5 +j).ToString()];
      

      【讨论】:

      • for (int i=0; i
      • 我明白了,我的问题问错了。我知道如何手动填充,但我想让程序自己完成。
      • 我需要为“Controls.Item”指定一个特定的命名空间吗?
      • 不,没有“Controls.Items”