-2

我把一个通用列表放在一个私有帮助方法中......

    private void addButton()
    {
        List<Button> buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9); 
    }

我知道调用这个方法你必须做这样的事情......

    private void button1_Click(object sender, EventArgs e)
    {
            addButton();

            foreach (button in addButton())
            {
                button.Enabled = false;
            }
    }

但是...当我尝试在 addButton() 中调用按钮时,“按钮”下方出现红线,表示找不到。请有人帮忙:)

4

3 回答 3

4

您的方法应返回列表:

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    //...
    return buttonList;
}

你也不需要第一个addButton();

private void button1_Click(object sender, EventArgs e)
{
        foreach (Button button in addButton())
        {
            button.Enabled = false;
        }
}

我会用yield关键字重写这个方法:

private IEnumerable<Button> addButton()
{
    yield return button1;
    yield return button2;
    //...
    yield return button9;
}

因为您不需要创建按钮列表,每次需要时都可以浏览它们。仅列举它们就足够了。


另请查看Methods (C# Programming Guide),关于方法返回值的部分:

方法可以向调用者返回一个值。如果返回类型(方法名称之前列出的类型)不是 void,则该方法可以使用 return 关键字返回值。带有关键字 return 后跟与返回类型匹配的值的语句将将该值返回给方法调用者。return 关键字也会停止方法的执行。如果返回类型为 void,则没有值的 return 语句仍可用于停止方法的执行。如果没有 return 关键字,方法将在到达代码块末尾时停止执行。具有非 void 返回类型的方法需要使用 return 关键字来返回值。


PS:查看我在如何缩短此通用列表中的答案?. 也许这仍然是一个更好的方法?

于 2013-01-24T01:13:59.520 回答
0

将您的代码更改为:

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    buttonList.Add(button2);
    buttonList.Add(button3);
    buttonList.Add(button4);
    buttonList.Add(button5);
    buttonList.Add(button6);
    buttonList.Add(button7);
    buttonList.Add(button8);
    buttonList.Add(button9); 

    return buttonList;
}


private void button1_Click(object sender, EventArgs e)
{
     foreach (var button in addButton())
     {
          button.Enabled = false;
     }
}
于 2013-01-24T01:15:17.883 回答
0

像这样使用它 -

    List<Button> buttonList;
    private List<Button> addButton()
    {
        buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        addButton();

        foreach (button in buttonList)
        {
            button.Enabled = false;
        }
    }
于 2013-01-24T01:15:33.887 回答