![](/img/trans.png)
[英]C# System.ArgumentOutOfRangeException:Index was out of range
[英]c# - ArgumentOutOfRangeException: Index was out of range - 2 Forms
問題解決了。
原始的“私有無效buttonSave_Click”已更改為:
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);
formMain.ListAlbums(formMain.AlbumsListBox.Items);
this.Close();
}
else
{
MessageBox.Show("No room for new album.");
this.Close();
}
}
原始帖子:
我是使用C#的新手,因此對於任何看似明顯的錯誤或糟糕的編碼來說,它都是應用程序。
我試圖創建一個新的相冊對象(從FormFormAlbumAC上的NameTextBox.Text獲取其名稱),並在用戶單擊FormAlbumAC上的保存按鈕時將其添加到List AlbumList。 然后,我想在FormFormMain的列表框中列出所有AlbumList。
當我運行程序並單擊“保存”按鈕時,在以下行出現錯誤“未處理ArgumentOutOfRangeException,索引超出范圍”:
if (MusicCollection.FormMain.PublicVars.AlbumList[i] == null)
// line 8 on my excerpt from Form FormAblumAC
我不確定自己在做什么錯。 任何幫助將不勝感激,謝謝。
表格FormMain:
public const int MAX_ALBUMS = 100;
public int totalAlbums = 0;
public FormMain()
{
InitializeComponent();
}
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;
}
}
public void ListAlbums(IList list)
{
list.Clear();
foreach (var album in PublicVars.AlbumList)
{
if (album == null)
continue;
list.Add(album.Name);
}
}
表格FormAlbumAC:
private FormMain formMain;
private void buttonSave_Click(object sender, EventArgs e)
{
int index = -1;
for (int i = 0; i < MusicCollection.FormMain.MAX_ALBUMS; ++i)
{
if (MusicCollection.FormMain.PublicVars.AlbumList[i] == null)
{
index = i;
break;
}
}
if (index != -1)
{
MusicCollection.FormMain.PublicVars.AlbumList[index] = new Album(NameTextBox.Text);
++formMain.totalAlbums;
MessageBox.Show("New Album added: " + NameTextBox.Text);
formMain.ListAlbums(formMain.AlbumsListBox.Items);
this.Close();
}
else
{
MessageBox.Show("No room for new album.");
this.Close();
}
}
您的問題(根據您的評論)是您的for循環條件不正確。 您的for循環是這樣的:
for (int i = 0; i < MusicCollection.FormMain.MAX_ALBUMS; ++i)
這里有一個問題和一個潛在的問題。 首先,當此代碼實際運行時,它實際上正在運行:
for (int i = 0; i < 100; ++i)
因為MusicCollection.FormMain.MAX_ALBUMS
聲明為100。當MusicCollection.FormMain.PublicVars.AlbumList
的長度小於100時,這會導致錯誤,因為您試圖獲取不存在的索引。
相反,您需要從i=0
迭代到....PublicVars.AlbumList-1
的長度,或者最好是for(int i = 0; i < ....PublicVars.AlbumList.Count; i++)
。
第二個潛在的問題是您可能會跳過索引0。數組從索引0開始並繼續到length-1
。 因此,您可能需要i++
而不是++i
。 但是,取決於您的實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.