根据数据库结果创建或生成控件

时间:2015-02-12 00:49:32

标签: c# winforms

如何在Windows窗体应用程序中创建控件?当我从Combobox中选择一些东西时,我想生成一个文本框或一个单选按钮。我基本上想查询我的数据库,并根据字段的值,我想生成一个文本框或单选按钮。例如,如果我的查询返回值" Textbox",我想在表单上的指定位置生成一个文本框。如何实现这一目标?请帮忙。

1 个答案:

答案 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;

希望澄清问题并为您提供继续的起点。