0

ListBox (AlbumsListBox) を取得して、List (AlbumsListBox) 内のすべてを一覧表示しようとしています。

AlbumList と AlbumsListBox は両方とも Form FormMain で作成されます。新しいアルバム (FormAlbumAC の NameTextBox.Text で定義された Album.Name を持つ) が作成され、フォーム FormAlbumAC の AlbumList に移動します。

私が見たところ、AlbumsList を AlbumsListBox のデータソースにすることが正しい方法のようです。しかし、プログラムを実行すると、「NullReferenceException was unhandled, object reference not set to instance of an object」というエラーが表示されます。

FormAlbumAC の抜粋の Ln 16 は、それが発生する場所です。

formMain.AlbumsListBox.DataSource = MusicCollection.FormMain.PublicVars.AlbumList;

その直前のメッセージ ボックスに AlbumList.Count = 1 と表示されているため、AblumList は null ではないので、なぜこれが起こっているのかわかりません。

私は何を間違っていますか?これは私が望むものを達成する正しい方法ですか? どうすればこれを修正できますか? アドバイスをいただければ幸いです。

フォーム FormAlbumAC:

private FormMain formMain;

public FormAlbumAC(FormMain callerInstance)
{
    InitializeComponent();
    formMain = callerInstance;
}

private void buttonSave_Click(object sender, EventArgs e)
{
    if (MusicCollection.FormMain.PublicVars.AlbumList.Count != 100)
    {
        MusicCollection.FormMain.PublicVars.AlbumList.Add(new Album(NameTextBox.Text));

        MessageBox.Show("New Album added: " + NameTextBox.Text);
        MessageBox.Show(MusicCollection.FormMain.PublicVars.AlbumList.Count.ToString());
        formMain.AlbumsListBox.DataSource = MusicCollection.FormMain.PublicVars.AlbumList;
        this.Close();
    }
    else
    {
        MessageBox.Show("No room for new album.");
        this.Close();
    }
}

フォーム フォームメイン:

public const int MAX_ALBUMS = 100;

public FormMain()
{
    InitializeComponent();
}

private void buttonAddAlbum_Click(object sender, EventArgs e)
{
    FormAlbumAC addAlbumForm = new FormAlbumAC(this);
    addAlbumForm.ShowDialog();
}

public static class PublicVars
{
    public static List<Album> AlbumList { get; set; }

    static PublicVars()
    {
        AlbumList = new List<Album>(MAX_ALBUMS);
    }
}

public ListBox AlbumListBox
{
    get
    {
        return AlbumListBox;
    }
}
4

1 に答える 1

3

ローカル変数private FormMain formMain;が初期化されていません。
したがって、失敗した行で使用すると NULL になります。

FormMainFormMain 型のインスタンス変数を使用して、クラスに静的に格納された情報を使用しようとしています。しかし、この変数は NULL であり、データにアクセスできません。

を使用してエラーを削除できます

 formMain = new FormMain();
 formMain.AlbumsListBox.DataSource = MusicCollection.FormMain.PublicVars.AlbumList;
 ....

しかし、この時点で、このローカル インスタンスはFormMain、現在のインスタンスを作成した FormMain のインスタンスと同じではないため、他の問題が発生すると思いますFormAlbumAC
。私の仮定が正しい場合は、そのインスタンスを渡す必要がありますFormMainFormAlbumACクラス内に作成します。

private FormMain formMain;

public FormAlbumAC(FormMain callerInstance)
{
    InitializeComponent();
    formMain = callerInstance;
}

次に、FormMain のどこかで、FormAlbumAC を作成するときに

....
FormAlbumAC album = new FormAlbumAC(this);
album.ShowDialog();
....
于 2013-04-06T08:57:46.103 に答える