将字符串转换为按钮

omE*_*han 1 c# string button winforms

我在图形winforms上创建了5个按钮(即:btn0,btn1,btn2,btn3,btn4)。我想用这些按钮填充数组。

以下代码正在运行:

Button[] btn = new Button[5];

for (int i=0; i<5; i++)
 Button[i] = new Button();

btn[0]=btn0;
btn[1]=btn1;
btn[2]=btn2;
btn[3]=btn3;
btn[4]=btn4;
Run Code Online (Sandbox Code Playgroud)

但是我希望能够在一个for循环内完成它(假设我有100个按钮)。这可能吗?

我尝试通过以下方式进行操作,但出现错误:

无法将类型'string'隐式转换为'System.Windows.Forms.Button'

Button[] btn = new Button[5];
for (int i=0; i<5; i++)
{
    btn[i] = new Button();
    btn[i] = "btn"+i.ToString():
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*eve 5

如果要将现有按钮添加到集合中,则可以使用OfType扩展并将其添加到集合中List<Button> (这比数组要好,因为您不需要知道表单上存在多少个按钮)

这放在形式的构造函数中

public class Form1: Form
{ 
    private List<Button> myButtons = new List<Button>();
    public Form1()
    {
        InitializeComponent();
        foreach(Button btn in this.Controls.OfType<Button>()
            myButtons.Add(btn);
    }
}
Run Code Online (Sandbox Code Playgroud)

List<Button>可用于像阵列

// Get the first button in the list
Button btn = myButtons[0];

// Change the caption of the buttons....
for(int x = 0; x < myButtons.Count; x++)
     btn.Text = "Button" + x.ToString();
Run Code Online (Sandbox Code Playgroud)

当然,您需要考虑是否确实需要这样做,因为从Controls集合中可以找到表单上的每个按钮,正如从我准备列表的第一个示例中可以看到的那样。

请记住,当您写作时

 btn[i] = new Button();
Run Code Online (Sandbox Code Playgroud)

您正在动态创建一个新按钮来替换最初设置的按钮实例。此新按钮与表单设计器上的按钮无关。