在运行时由用户动态创建c#中的按钮

时间:2017-07-08 06:18:33

标签: c# visual-studio

如何在C#(Visual Studio)中输入用户后动态创建按钮。 有一个文本框可以输入用户想要的按钮数量? 然后我的目标是在用户想要的输入字段下创建按钮 那我怎么能得到那些按钮的id?

private void button1_Click(object sender, EventArgs e)
{
    List<Button> buttons = new List<Button>();
    for (int i = 0; i < n; i++)
    {
        this.Controls.Add(buttons[i]);
    }
}

2 个答案:

答案 0 :(得分:2)

这里我首先向textbox添加了一个事件处理程序,只要文本值发生变化就会调用它。该值将转换为int值,然后在for循环语句中使用。您可以使用location属性将按钮的部分设置为所需的值。使用标签或名称属性,您可以为按钮分配唯一值。我希望代码有所帮助。

请看下面的代码:

private void Form1_Load(object sender, EventArgs e)
{
 textBox1.TextChanged += textBox1_TextChanged;
}

void textBox1_TextChanged(object sender, EventArgs e)
{
 var txtBox = sender as TextBox;
 if (txtBox == null) return;
 var count = Convert.ToInt16(txtBox.Text);
 //
 var xPosition = 0;
 for (var i = 1; i <= count; i++)
 {
  var button = new Button
  {
   Tag = string.Format("Btn{0}", i),
   Text = string.Format("Button{0}",i),                        
   Location = new Point(xPosition, 0)
  };
 xPosition = xPosition + 100;
 Controls.Add(button);
}

答案 1 :(得分:0)

当您创建Control(在您的情况下为按钮)时,您可以为它们提供Name属性。如果该名称是唯一的,那将是非常好的。

var btn = new Button();
btn.Name = "MyBtn";
btn.Text = "Our Button";
this.Controls.Add(btn);

对于N buttons的创建,您只需将其置于具有N次迭代的循环中,并将btn.Name设置为“Name”+ SomeNumber。 要将按钮的位置设置为输入下方,您应将btn.Leftbtn.Top设置为相应的坐标。

然后,当您需要使用生成的控件/按钮时,您可以按以下方式按Name进行搜索:

var btn = (Button)this.Controls.Find("MyBtn", true).First();

并使用该控件/按钮执行任何操作。

但是在这种情况下存在一些危险,因为我没有检查是否找到了具有该名称的任何控件。如果您编写的名称不正确,则会在.First()上抛出异常。