1

次の未処理の例外が発生しています

NullReferenceException は処理されませんでした。オブジェクト参照がオブジェクト インスタンスに設定されていません。

そして警告のようなもの

フィールド 'Project3_MineSweeper.Form3.form2' は割り当てられず、常にデフォルト値が null になります

ここに私のDB.csのコードがあります

public class DB
    {
    ...

    public DataTable GetData()
        {
            string spName = "GetTime";
            Connection.Open();

            SqlCommand command = new SqlCommand(spName, Connection);
            command.CommandType = CommandType.StoredProcedure;

            SqlDataReader reader = command.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Columns.Add("Name");
            dt.Columns.Add("Score");

            while (reader.Read())
            {
                DataRow dr = dt.NewRow();
                dr["name"] = Convert.ToString(reader["name"]);
                dr["timeScore"] = Convert.ToInt32(reader["timeScore"]);
                dt.Rows.Add(dr);
            }

            Connection.Close();
            return dt;
        }
    }

Form3.cs のコードは次のとおりです。

public partial class Form3 : Form
    {
        //THE WARNING
        private Form2 form2; 
        public Form3()
        {
            InitializeComponent();
            loadData();
        }

        public void loadData()
        {
            //UNHANDLED EXCEPTION HERE
            DataTable dt2 = form2.db.GetData(); 
            dgvScore.DataSource = dt2;
        }

    }

最後に Form2.cs

public partial class Form2 : Form
    {
        public DB db;

        private Form3 form3;
        public Form2()
        {
            db = new DB();
            InitializeComponent();
        }
     ...
}

どうしたの?そして、この問題を解決するにはどうすればよいですか?

4

2 に答える 2

2

form2 を初期化しないため、この行で null 参照が発生します。

DataTable dt2 = form2.db.GetData();

次のようなことをする必要があります

form2 = 新しい Form2();

必要な場所に応じて。

 public partial class Form3 : Form
    {
        private Form2 form2; // <--- you never initialize form2
        public Form3()
        {
            InitializeComponent();
            loadData();
        }

        public void loadData()
        {
            //UNHANDLED EXCEPTION HERE
            DataTable dt2 = form2.db.GetData(); 
            dgvScore.DataSource = dt2;
        }

    }
于 2013-07-14T17:34:01.230 に答える
2
public void loadData()
{
     form2 = new Form2();  // add this line to init form2 before using
     DataTable dt2 = form2.db.GetData(); 
     dgvScore.DataSource = dt2;
}
于 2013-07-14T17:34:51.097 に答える