从子表单调用父表单上的方法

时间:2012-02-10 21:16:42

标签: c# methods

我一直试图让它工作一段时间但不能(我对C#和OOP来说相当新)。

基本上,我在第二种形式上有这段代码:

private void button1_Click(object sender, EventArgs e)
{
    if (charCount > 2 && charCount < 30)
    {
        try
        {
            conn.Open();
        }
        catch (Exception ex)
        {
        //Error handling code here
        }
        finally
        {
            conn.Close();
        }
        //Run the SQL statements
        try
        {

        //SQL insert data is here

        }
        catch (Exception ie)
        {
            MessageBox.Show(ie.Message);
        }
        finally
        {
            //Close the connection
            if (conn.State != ConnectionState.Closed)
            {
                conn.Close();
            }

            mainForm.refreshCall();

            this.Close();
        }

    }
    else
    {
        MessageBox.Show("Part numbers can be between 2 and 30 characters.\n Yours was " + charCount + " characters long.", "Error");
    }

}

这一切都运行良好并且做了它应该做的事情,这是将一些数据插入到SQL数据库中(我把那个代码拿出来使它更清洁)。所以一旦发生这种情况,我会尝试执行mainForm.refreshCall()。这个refreshCall方法存在于我的第一个表单或mainForm上,如下所示:

public static void refreshCall()
{
    SqlConnection conn = new SqlConnection("Data Source=DSERVER\\NEW_SQL;Initial Catalog=AWSoftware;Integrated Security=True");
    try
    {
        conn.Open();
        DataSet ds = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter("SELECT part_num from dbo.CustomParts", conn);
        adapter.Fill(ds);
        this.listParts.DataSource = ds.Tables[0];
        this.listParts.DisplayMember = "part_num";
        conn.Close();
    }

    catch (SqlException odbcEx)
    {
        MessageBox.Show("There was an error connecting to the data source\nError Code: 1001", "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

但是,this.listParts.DataSourcethis.listParts.DisplayMember都告诉我它们不是有效的静态属性Error,静态方法或静态字段初始化。我完全被这意味着什么困惑。如果有人愿意为我阐明这一点,我将不胜感激!

1 个答案:

答案 0 :(得分:0)

您的refreshCall被标记为static,但您正在引用实例化的变量,在这种情况下,您的ListBox,因此无效。您必须将ListBox作为参数引用传递,或者只删除static属性。

最简单的方法:

public void refreshCall() {
  // blah-blah
}

然后方法调用更改为:

this.refreshCall();