如何使用winforms app从其他类添加列表框项?

时间:2018-02-03 21:44:26

标签: c# winforms listbox

我正在尝试将项目添加到另一个类的列表框中。

我创建了一个名为 FilterControl 的表单名称,它有一个列表框控件( listBoxColumnHeaders

我创建了一个名为 FilterColumnHeader 的单独类,在那里我创建了一个方法() addColumnHeader()

现在我正在尝试从FilterControl

获取FilterColumnHeader表单的列表框

这是我的代码:

public void addColumnHeader(string name)
    {
        try
        {
            string cs = ConfigurationManager.ConnectionStrings["TestConnectionString"].ConnectionString;

            string query = @"SELECT 
                            AsHeading
                        FROM
                            RSHeading WITH(NOLOCK);
            using (SqlConnection con = new SqlConnection(cs))
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = query;
                cmd.Connection = con;

                con.Open();
                SqlDataReader rd = cmd.ExecuteReader();

                FilterControl fc = new FilterControl();
                while (rd.Read())
                {
                    fc.listBoxColumnHeaders.Items.Add(rd["AsHeading"].ToString());
                    MessageBox.Show(rd["AsHeading"].ToString()); //record is showing on message box

                }

            }
        }
        catch(Exception ee)
        {
            MessageBox.Show(ee.ToString());
        }

    }

注意

  

如果我直接从同一个表单(FilterControl)尝试。它工作正常,数据库也成功检索记录。

     

我将列表框控件的修饰符设置为Public

1 个答案:

答案 0 :(得分:1)

尝试访问课程中的表单:

var fc= Application.OpenForms.OfType<FilterControl>().SingleOrDefault();
while (rd.Read())
            {
                fc.listBoxColumnHeaders.Items.Add(rd["AsHeading"].ToString());
                MessageBox.Show(rd["AsHeading"].ToString()); 
            }