【发布时间】:2013-04-06 17:26:10
【问题描述】:
我正在尝试让一个列表框 (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();
}
}
FormFormMain:
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;
}
}
【问题讨论】:
-
你在哪条线上?您是否通过调试确定 什么 是
null? -
private FormMain formMain;在哪里设置了一个值? formMain 此时为空 -
FormAlbumAC 的第 16 行,“formMain.AlbumsListBox.DataSource = MusicCollection.FormMain.PublicVars.AlbumList;”是发生错误的地方。我不确定它所指的 null 是什么。我对使用 c# 和 Visual Studio 很陌生,并且由于整行都被突出显示并且消息没有指定特定的变量,我不确定在哪里可以找到问题的核心。