我试图让一个列表框(AlbumsListBox)列出列表(AlbumList)中的所有内容。
AlbumList 和 AlbumsListBox 都是在 FormMain 上创建的。创建一个新专辑(在 FormAlbumAC 上的 NameTextBox.Text 中定义 Album.Name)以进入 FormAlbumAC 上的 AlbumList。
从我所见,使 AlbumsList 成为 AlbumsListBox 的数据源似乎是正确的方法。但是当我运行程序时出现错误“NullReferenceException 未处理,对象引用未设置为对象的实例”。
FormAlbumAC 摘录的第 16 行就是它出现的地方。
formMain.AlbumsListBox.DataSource = MusicCollection.FormMain.PublicVars.AlbumList;
我不明白为什么会这样,因为在那之前的消息框显示 AlbumList.Count = 1,所以 AblumList 不为空?
我究竟做错了什么?这是实现我想要的正确方法吗?我怎样才能解决这个问题?任何建议表示赞赏,谢谢。
表格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;
}
}