如何在C#中重命名一个循环中的多个按钮

时间:2011-07-14 23:28:43

标签: c# winforms loops button text

我有一个类似战舰的程序,其中有一个10 x 10网格的按钮。在程序的开头,我希望所有按钮的文本都改为“---”,这表明没有人在那个坐标上射击。我似乎无法找到一种方法来重命名一个循环中的所有按钮。这些按钮都有名称b00,b01,b02 ......显示它们的坐标。第一个数字是行,第二个数字是列。 (即b69代表第7行,第10列)。

希望你能帮忙!

提前谢谢!

6 个答案:

答案 0 :(得分:4)

您还可以使用扩展方法 OfType()根据指定的类型进行过滤。参见下一个示例

foreach (Button btn in this.Controls.OfType<Button>())
   {

   btn.Text="New Name";
   }
通过使用OfType扩展方法可以看到

,您不需要将控件转换为Button Type

希望有所帮助。

此致

答案 1 :(得分:1)

这个怎么样:

    foreach (Control c in this.Controls) {
        if (c is Button) {
            ((Button)c).Text = "---";
        }
    }

此代码段循环遍历表单上的所有控件(this),检查每个控件是否为Button,以及是否将其Text属性设置为“---”。或者,如果您的按钮位于某个其他容器(例如Panel)上,则会将this.Controls替换为yourPanel.Controls

答案 2 :(得分:1)

您可以从父容器中获取控件列表并循环显示它们。

这样的事情:

foreach (Control c in myForm.Controls)
{
  if (c is Button)
  {
    ((Button)c).Text = "---";
  }
}

答案 3 :(得分:1)

考虑将每个按钮添加到列表中:

// instantiate a list (at the form class level)
List<Button> buttonList = new List<Button>();

// add each button to the list (put this in form load method)
buttonList.add(b00);  
buttonList.add(b01);
... etc ...

然后你可以像这样设置一个给定的按钮:

buttonList(0).Text = "---"  // sets b00

或者所有按钮:

foreach (Button b in buttonList) {
   b.Text = "---";
   }

其他可能性比比皆是:

  • 将按钮放在2D数组中以允许按行和列进行寻址。您仍然可以对阵列进行预设,以便立即设置。

  • 以progamatically方式创建按钮(以及设置大小和位置),以避免必须在设计器中创建所有按钮。这也允许您在运行时设置网格大小。

答案 4 :(得分:0)

我在这种情况下所做的是将我想要经常操作的控件存储到List或最好是IEnumerable<>集合中,我通常在构造或Load事件中初始化它包含控件的处理程序(例如,如果这些控件包含在Form中,或者包含在GroupBox中)。通过这样做,我希望减少每次我需要这个集合时必须找到这些控件的命中。如果您只需要执行此操作一次,我就不会费心添加buttons集合。

所以,像这样:

// the collection of objects that I need to operate on, 
// in your case, the buttons
// only needed if you need to use the list more than once in your program
private readonly IEnumerable<Button> buttons;

在构造函数或加载事件处理程序中:

this.buttons = this.Controls.OfType<Button>();

然后,每当我需要更新这些控件时,我只使用这个集合:

foreach (var button in this.buttons)
{
    button.Text = @"---";

    // may wanna check the name of the button matches the pattern
    // you expect, if the collection contains other 
    // buttons you don't wanna change
}

答案 5 :(得分:0)

foreach(Control c in this.Controls)
{
if(c.type==new Button().type)
{
Button b=(Button)c;
b.Text="";
}
}