如何在c#中在一个循环中重命名多个按钮
本文关键字:循环 重命名 按钮 一个 | 更新日期: 2023-09-27 18:02:22
我有一个类似战舰的程序,其中有一个10 x 10的按钮网格。在程序开始时,我希望所有按钮的文本都更改为"——",这表明没有人在该坐标上射击。我似乎找不到在一个循环中重新命名所有按钮的方法。按钮的名称都是b00, b01, b02…表示它们的坐标。第一个数字是行,第二个数字是列。(即b69代表第7行,第10列)。
希望你能帮忙!
提前感谢!
《路加福音》您也可以使用扩展方法 OfType()根据指定的类型进行过滤。参见下一个示例
foreach (Button btn in this.Controls.OfType<Button>())
{
btn.Text="New Name";
}
可以看到,通过使用OfType扩展方法,您不需要将控件强制转换为按钮类型
希望对你有帮助。
对
这个怎么样:
foreach (Control c in this.Controls) {
if (c is Button) {
((Button)c).Text = "---";
}
}
这段代码循环遍历表单(this
)上的所有控件,检查每个控件是否为Button,以及是否将其Text属性设置为"——"。或者,如果你的按钮在其他容器上,比如面板,你可以用yourPanel.Controls
代替this.Controls
。
您可以从父容器中获取控件列表并遍历它们。
像这样:
foreach (Control c in myForm.Controls)
{
if (c is Button)
{
((Button)c).Text = "---";
}
}
考虑将每个按钮添加到一个列表中:
// 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 = "---";
}
其他可能性还有很多:
将按钮放在二维数组中,允许按行和列寻址。您仍然可以对数组执行foreach操作,以便一次设置所有内容。
以编程方式创建按钮(并设置大小和位置),以避免在设计器中创建所有按钮。这也允许你在运行时设置网格大小。
我在这种情况下所做的是将我想要频繁操作的控件存储到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
}
foreach(Control c in this.Controls)
{
if(c.type==new Button().type)
{
Button b=(Button)c;
b.Text="";
}
}