此功能动态创建九个按钮,供我正在制作的游戏使用。你可以看到我给按钮的属性。
private void createbuttons()
{
int tot = 0;
int x = 100;
int y = 100;
while(tot < 9)
{
string buttonsname = (tot + "button").ToString();
Button creating = new Button();
creating.Name = buttonsname;
creating.Size = new Size(100, 100);
creating.Click += delegate
{
MessageBox.Show("You clicked me!");
};
creating.Text = buttonsname;
if(x > 300)
{
y += 100;
x = 100;
}
creating.Location = new Point(x, y);
Controls.Add(creating);
tot += 1;
x += 100;
}
}
我想知道的是如何在同一表格的不同部分引用这些按钮。特别是当点击“开始游戏”时,我想将每个按钮的文本更改为不同的文本。
private void button10_Click(object sender, EventArgs e)
{
//What would I write here to change the text?
}
答案 0 :(得分:2)
您可以通过枚举控件来访问按钮,也可以创建按钮列表以供将来参考,稍后再使用该列表。
以下是如何使用列表执行此操作:
private IList<Button> addedButtons = new List<Button>();
private void createbuttons() {
int tot = 0;
int x = 100;
int y = 100;
while(tot < 9) {
string buttonsname = (tot + "button").ToString();
Button creating = new Button();
creating.Name = buttonsname;
creating.Size = new Size(100, 100);
creating.Click += delegate {
MessageBox.Show("You clicked me!");
};
creating.Text = buttonsname;
if(x > 300) {
y += 100;
x = 100;
}
creating.Location = new Point(x, y);
addedButtons.Add(creating); // Save the button for future reference
Controls.Add(creating);
tot += 1;
x += 100;
}
}
现在你可以这样做:
foreach (var btn : addedButtons) {
btn.Text = "Changed "+btn.Text;
}
答案 1 :(得分:0)
表单有一个属性Controls
,用于保存所有子控件。要通过其Name
属性使用方法Find
查找子控件,该方法返回数组,因为可能存在多个具有相同Name
的控件,但如果确保存在名称,是唯一的,你知道他们的类型(Button
)你可以从数组中取出第一个项目并进行投射:
private void button10_Click(object sender, EventArgs e)
{
Button buttonNamedFred = (Button)this.Controls.Find("Fred", false)[0];
buttonNamedFred.Text = "I'm Fred";
}