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)
如果要将现有按钮添加到集合中,则可以使用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)
您正在动态创建一个新按钮来替换最初设置的按钮实例。此新按钮与表单设计器上的按钮无关。