如何在Windows窗体应用程序中创建控件?当我从Combobox中选择一些东西时,我想生成一个文本框或一个单选按钮。我基本上想查询我的数据库,并根据字段的值,我想生成一个文本框或单选按钮。例如,如果我的查询返回值" Textbox",我想在表单上的指定位置生成一个文本框。如何实现这一目标?请帮忙。
答案 0 :(得分:0)
最简单的方法是在代码中手动创建控件,然后将其添加到Controls
集合中。根据某些输入数据(无论是数据库查询还是从组合框中选择的值)确定要创建哪个控件与其他任何情况都没有太大区别。简单的if
将完成这项工作。例如:
private void AddControl(string control)
{
if (control == "Textbox")
{
TextBox tb = new TextBox();
tb.Location = new Point(100, 100);
this.Controls.Add(tb);
}
else if (control == "Radio")
{
RadioButton rb = new RadioButton();
rb.Location = new Point(200, 100);
this.Controls.Add(rb);
}
}
当然,这是非常天真的版本。但这只是一个起点。我留给您添加更多高级逻辑(例如动态调整位置,设置单选按钮或文本框的属性,依赖于Type
而不是简单的string
等)。
假设您从数据库中检索string
值。例如,在表单构造函数中:
public Form1()
{
InitializeComponent();
string requestedControl = QueryDatabase();
AddControl(requestedControl);
}
我留给您实现查询数据库的方法。
在问题中,您还提到在组合框中选择控件后添加控件。在这种情况下,唯一的区别是你依赖于组合框选择改变后触发的事件:
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
string res = this.comboBox1.SelectedItem.ToString();
this.AddControl(res);
}
这里依靠SelectedValueChanged事件。当然,在这种情况下,你的组合框必须填充预期的值(这里" Radio"" Textbox")。此外,您必须将事件处理程序附加到组合框上的特定事件。您可以在设计器中执行此操作,也可以在构造函数中添加以下行:
combobox1.SelectedValueChanged += comboBox1_SelectedValueChanged;
希望澄清问题并为您提供继续的起点。