Вызов метода в родительской форме из дочерней формы - PullRequest
1 голос
/ 11 февраля 2012

Я пытался заставить это работать некоторое время, но не могу (я довольно плохо знаком с C # и ООП в целом).

По сути, у меня есть этот кусок кода во второй форме:

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.DataSource и this.listParts.DisplayMember оба говорят мне, что они не являются допустимыми статическими свойствами Ошибка, статический метод или статическое поле инициализируются. Я абсолютно сбит с толку, что это значит. Если бы кто-то был так любезен, чтобы пролить некоторый свет на это для меня, я был бы очень признателен!

1 Ответ

0 голосов
/ 11 февраля 2012

Ваш refreshCall помечен как static, но вы ссылаетесь на созданные экземпляры переменных, в данном случае, на ListBox, так что это не будет работать.Вы должны либо передать ListBox в качестве ссылки на параметр, либо просто удалить атрибут static.

Самый простой способ:

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

, тогда вызов метода изменится на:

this.refreshCall();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...