是否存在影响表单上出现的几个按钮的快捷方式?

时间:2016-05-30 12:01:46

标签: c# winforms

private void clearBoard()
{
    button1.Text = null;
    button2.Text = null;
    button3.Text = null;
    button4.Text = null;
    button5.Text = null;
    button6.Text = null;
    button7.Text = null;
    button8.Text = null;
    button9.Text = null;
} 

我有9个按钮。 (button1 - button9)。我希望他们都清除文本。 有更有效的方法可以做到这一点,而不是通常清除每一个吗?

顺便说一句,我知道我可以创建一系列按钮但是在这里,所有按钮都是从窗口手动创建的。所以也许这里不可能。

5 个答案:

答案 0 :(得分:5)

如果要清除表单中所有按钮的文本,请使用:

foreach (Control b in this.Controls.OfType<Button>())
        b.Text = string.Empty;

但是如果你只想要9个按钮的明文,有各种方法,其中包括以下两个:

for (int i = 1; i <= 9; i++)
{
    var button = this.Controls.OfType<Button>().Where(b => b.Name == "button" + i).FirstOrDefault();
    if (button != null) button.Text = string.Empty; 
}

或者你也可以使用这个:

List<Button> listButtons = new List<Button>() { button1, button2, button3,
    button4, button5, button6, button7, button8, button9 };
foreach (var item in listButtons)
    item.Text = string.Empty;  

答案 1 :(得分:3)

我能想到的唯一增强功能是将按钮放在列表或数组中。如果手动创建按钮,一种方法是在表单中声明成员变量:

public partial class Form1 : Form
{
    private List<Button> buttons = new List<Button>();

    //...
}

在创建按钮时将其添加到该列表中:

private void CreateNextButton()
{
    Button button = new Button();
    // initialize button
    Controls.Add(button);

    // add button to your list
    buttons.Add(button);
}

然后将clearBoard更改为:

private void clearBoard()
{
    foreach(Button button in buttons) button.Text = string.Empty; 
} 

答案 2 :(得分:1)

我认为更简单的形式是遍历页面的控件,并仅为按钮设置text属性。

protected void Page_Load(object sender, EventArgs e)
{
    foreach (Control control in Page.Controls)
    {
        if (control is Button)
        {
            ((Button)control).Text = string.Empty;
        }
    }
}

不要忘记你应该遍历按钮分层的父控件。如果它们在div中,则遍历该div(比如它的id是myDiv) - 如:

foreach(Control control in myDiv.Controls)

答案 3 :(得分:0)

您可以循环浏览控件并检查它是否为Button,如果是,请将Text属性设置为null

foreach (var button in this.Controls)
{
    if (button is Button)
    {
        ((Button)button).Text = null;
    }
}

答案 4 :(得分:0)

如果他们在Window本身,你可以做

private void ClearButton()
{
    foreach (var control in this.Controls)
    {
        Button btn = control as Button;
        if (btn != null)
        {
            btn.Text = string.Empty;
        }
    }
}