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;
}
}