引用循环外的按钮?

时间:2015-09-26 16:46:02

标签: c# winforms 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);

        Controls.Add(creating);
        tot += 1;
        x += 100;
    }

}

我想知道的是如何在同一表格的不同部分引用这些按钮。特别是当点击“开始游戏”时,我想将每个按钮的文本更改为不同的文本。

private void button10_Click(object sender, EventArgs e)
{
    //What would I write here to change the text?
}

2 个答案:

答案 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";
}