C# 将comboBox传递到其他窗体

C# 将comboBox传递到其他窗体,c#,forms,combobox,C#,Forms,Combobox,尝试将数据从主窗体中的comboBox传递到位于不同窗体中的comboBox,虽然我经历了其他类似/相同的线程,但我无法理解为什么它不希望以不同的窗体显示 主要形式: public static ComboBox cb = new ComboBox(); private void ComboTransfer() { string sql = "SELECT [Department] FROM [employeeTable]"; SqlC

尝试将数据从主窗体中的comboBox传递到位于不同窗体中的comboBox,虽然我经历了其他类似/相同的线程,但我无法理解为什么它不希望以不同的窗体显示

主要形式:

    public static ComboBox cb = new ComboBox();


    private void ComboTransfer()
    {
        string sql = "SELECT [Department] FROM [employeeTable]";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            comboBox1.Items.Add(dr[0]);
        }
        cb = comboBox1;
        Department_wise_Employee_Details dep = new Department_wise_Employee_Details(cb);
    }
部门员工详细信息表:

public partial class Department_wise_Employee_Details : Form
{
    public Department_wise_Employee_Details()
    {
        InitializeComponent();
    }

    public Department_wise_Employee_Details(ComboBox cb)
    {
        comboBox1 = cb;
    }
}

将全局静态
cb
传递到第二个表单可能会起作用,但您需要读取此传递组合的项目,并逐个添加在第二个表单中定义的组合框中

如果您只是重新分配第二个组合以使用全局组合,那么还需要将该组合添加到第二个表单的控件集合中(我不确定在这里使用静态控件会有什么副作用)

也许最好的方法是传递共享数据,让表单引擎使用控件执行其常规工作。在这种情况下,您将加载一个包含要共享的数据的
DataTable
,并使用它设置两个组合的datasource属性

比如说

private void ComboTransfer()
{
    DataTable dt = new DataTable();
    string sql = "SELECT [Department] FROM [employeeTable]";
    using(SqlCommand cmd = new SqlCommand(sql, con))
    using(SqlDataReader dr = cmd.ExecuteReader())
    {
        dt.Load(dr);
    }
    comboBox1.DataSource = dt;
    Department_wise_Employee_Details dep = 
                 new Department_wise_Employee_Details(dt);
}

....


public partial class Department_wise_Employee_Details : Form
{
    ....
    public Department_wise_Employee_Details(DataTable dt)
    {
        InitializeComponent();
        this.comboBox1.DataSource = dt;
    }
    ....
}

在这种情况下,始终将数据传递给新表单,而不是控件。ComboBox可以很容易地与数据源绑定,如DataTable、List等。

能否显示另一个表单的构造函数?我假设您在Details表单中拥有的只是一个构造函数。您是否也有空构造函数?在Details表单中是否有comboBox1对象。。?您在哪里调用
部门\u-wise\u-Employee\u-Details.Show()
表单是否显示。。?请用对象显示第二个窗体的完整类定义。您是指插入窗体的控件吗?如果是,那么它就在那里。Show方法以另一种形式调用。基本上从主窗体转到欢迎窗体/主页,有一种叫做“显示”的方法,用于窗体部门\u wise\u Employee\u详细信息,还有您想要的窗体,我刚刚完全复制了。我建议加载一个数据表,而不是试图传递整个控件,然后将相同的数据表传递给第二个表单完全同意你刚才写的Steve..但是在所有这些之后,来自主表单的组合框数据不会显示在另一个表单中。