程序开发 > C# > Winform > 正文

Winform动态添加按钮button及事件

亮术网 2020-08-29 本网原创

Winform 开发中,在某些情况下,需要动态添加按钮,例如在制作表单时,需要根据用户所选择的分类显示不同的输入框。假如有一个文件来源分类,当文件来自远程服务器时,需要输入登录远程服务器的用户名和密码;当文件来自当前电脑,只需要选择文件所在的文件夹。

假如默认选择来自远程服务器,当用户选择来自当前电脑时,隐藏或删除来自服务器的输入框,添加选择文件所在文件夹的按钮,当用户单击按钮时,打开选择文件夹对话框,选定文件夹后把路径赋给文本框。

 

Winform动态添加按钮button及事件

首先拖一个 ComboBox 到窗体中,再拖一个 Panel 控件到窗体中,下面开始根据用户选择动态添加不同的输入框、文件夹选择框、Button 及 Button click 事件:

1、双击窗体,打开后台代码文件,添加一个为 ComboBox 添加选项方法,并在初始化事件(AddButton_Load)中调用:

private void AddComboBox1Items()
  {
    comboBox1.Items.Add("远程服务器");
    comboBox1.Items.Add("当前电脑");
    comboBox1.SelectedIndex = 0;
  }

private void AddButton_Load(object sender, EventArgs e)
  {
    AddComboBox1Items();
  }

 

2、切换到窗体,双击 ComboBox,在 comboBox1_SelectedIndexChanged 事件中根据用户选择显示不同的项:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
  {
    switch (comboBox1.SelectedIndex)
    {
      case 0:
        AddServer();
        break;
      case 1:
        AddLocal();
        break;
      default:
        return;
    }
  }

//选择远程服务器时,显示的内容
  private void AddServer()
  {
    if(panel1.Controls.Count > 0)
      panel1.Controls.Clear();

  Label label1 = new Label();
    label1.Width = 63;
    label1.Text = "用户名:";
    label1.Top = panel1.Top / 2;
    label1.Left = panel1.Left - 10;
    panel1.Controls.Add(label1);

  TextBox textbox1 = new TextBox();
    textbox1.Name = "txtUser";
    textbox1.Width = 150;
    textbox1.Top = label1.Top - 5;
    textbox1.Left = label1.Left + label1.Width;
    panel1.Controls.Add(textbox1);

  Label label2 = new Label();
    label2.Width = 63;
    label2.Text = "密 码:";
    label2.Top = label1.Top;
    label2.Left = 240;
    panel1.Controls.Add(label2);

  TextBox textbox2 = new TextBox();
    textbox2.Name = "txtPass";
    textbox2.Width = 150;
    textbox2.Top = label1.Top - 5;
    textbox2.Left = 303;
    panel1.Controls.Add(textbox2);
  }

//选择当前电脑时,显示的内容
  private void AddLocal()
  {
    if (panel1.Controls.Count > 0)
      panel1.Controls.Clear();

  Label label1 = new Label();
    label1.Width = 102;
    label1.Text = "文件所在文件夹:";
    label1.Top = panel1.Top / 8 + 6;
    label1.Left = panel1.Left - 10;
    panel1.Controls.Add(label1);

  TextBox textbox1 = new TextBox();
    textbox1.Name = "txtLocal";
    textbox1.Width = 250;
    textbox1.Top = label1.Top - 5;
    textbox1.Left = label1.Left + label1.Width;
    panel1.Controls.Add(textbox1);

  Button button1 = new Button(); //动态添加Button
    button1.Text = " 浏 览 ";
    button1.Top = label1.Top - 6;
    button1.Left = 370;
    button1.Click += new EventHandler(button1_Click); //添加 Button click 事件
    panel1.Controls.Add(button1);
  }

//单击 Button 执行的方法
  private void button1_Click(object sender, EventArgs e)
  {
    FolderBrowserDialog fbd = new FolderBrowserDialog();
    fbd.ShowDialog();
    foreach (Control c in panel1.Controls)
    {
      if (c.Name.Equals("txtLocal"))
        c.Text = fbd.SelectedPath; ;
    }
  }

选择远程服务器效果图:

选择当前电脑效果图:

上述代码全部通过 Visual studio 测试。