Winform动态添加按钮button及事件
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 测试。