0

を取得してnull reference exceptionいますが、それを解決する方法や、なぜそれが起こるのかさえわかりません。

private void editThisToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (dataGridView1.SelectedRows.Count <= 1)
    {
        Form2 f2 = new Form2(dataGridView1.SelectedRows[0].Cells[1].Value.ToString(), Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[2].Value));
        f2.ShowDialog();
        textBox2.Text = textBox1.Text.Replace(f2.oldtext, f2.newtext);
        this.dataGridView1.SelectedRows[0].Cells[3].Value = f2.newtext;
        this.dataGridView1.SelectedRows[0].Cells[3].Style.BackColor = Color.IndianRed;
    }
    else
    {
        ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];
        int indexerr = 0;
        foreach (DataGridViewRow r in dataGridView1.SelectedRows)
        {
            ono[indexerr].newtext = this.dataGridView1.SelectedRows[indexerr].Cells[3].Value.ToString(); //null expection at ono[indexerr].newtext
            ono[indexerr].oldtext = this.dataGridView1.SelectedRows[indexerr].Cells[1].Value.ToString();
            ono[indexerr].offset = Convert.ToInt32(dataGridView1.SelectedRows[indexerr].Cells[0].Value);
            indexerr++;
        }
        Form3 f3 = new Form3(ono);
        f3.ShowDialog();
        indexerr = 0;
        for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
        {
            textBox2.Text = textBox1.Text.Replace(f3.nt[i].oldtext, f3.nt[i].newtext);
            this.dataGridView1.SelectedRows[i].Cells[3].Value = f3.nt[i].newtext;
            this.dataGridView1.SelectedRows[i].Cells[3].Style.BackColor = Color.IndianRed;
        }
    }
}

ここに小野クラスがあります

namespace IEditor
{
    public class ONOType
    {
        public string oldtext { get; set; }
        public string newtext { get; set; }
        public int offset { get; set; }
    }
}

問題は次の場所から始まります。

ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];

このクラス型の新しい配列をすべて null に定義しますが、これは望ましくないものであり、「new」キーワードが原因である可能性があり、「new」キーワードなしで comp を取得します。この配列内のそのオブジェクトに値を割り当てる際にエラーが発生しました。

私が試したのは、このクラスにctorを追加して、メンバーのこの配列メンバーのそれぞれにデフォルト値を割り当てることでした(別名、oldtext/newtext/offsetの値を割り当てます)が、それでもこのオブジェクト配列内のオブジェクトはnullであり、試してみましたget/set properties で同じことを行いますが、それでも失敗しました。

解決策とともに説明を追加してください。

4

1 に答える 1

3

ONOType次を使用して、参照の新しい配列を作成しています。

    ONOType[] ono = new ONOType[this.dataGridView1.SelectedRows.Count];

ただし、実際のONOTypeオブジェクトは作成されません。まだ何も参照していない単なる変数の配列です。

ono[indexerr].newtext要素を割り当てようとするono[indexerr]と、null 参照になります。

あなたがした場合:

    ono[indexerr] = new ONOType();
    ono[indexerr].newtext = this.dataGridView1.SelectedRows[indexerr].Cells[3].Value.ToString();

うまくいくと思います。

于 2013-03-15T02:03:17.817 に答える