c# - ArgumentOutOfRangeException: Index was out of range - 2 Forms -
problem solved.
the original "private void buttonsave_click" changed to:
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 new album."); this.close(); } } original post:
i'm new using c#, appologies seemly obvious mistakes or terrible coding.
i'm trying create new album object (that gets name nametextbox.text on form formalbumac) , add list albumlist when user clicks save button on formalbumac. want list of albumlist in listbox on form formmain.
when run program , click save button, i'm getting error "argumentoutofrangeexception unhandled, index out of range" @ line:
if (musiccollection.formmain.publicvars.albumlist[i] == null) // line 8 on excerpt form formablumac i'm not sure i'm doing wrong. appreciated, thank you.
form 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 { { return albumlistbox; } } public void listalbums(ilist list) { list.clear(); foreach (var album in publicvars.albumlist) { if (album == null) continue; list.add(album.name); } } form formalbumac:
private formmain formmain; private void buttonsave_click(object sender, eventargs e) { int index = -1; (int = 0; < 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 new album."); this.close(); } }
your problem (from comments) loop's condition incorrect. loop this:
for (int = 0; < musiccollection.formmain.max_albums; ++i) there 1 problem , 1 potential problem here. first, when code run, it's running:
for (int = 0; < 100; ++i) because musiccollection.formmain.max_albums declared 100. causes error when length of musiccollection.formmain.publicvars.albumlist less 100, because you're trying grab index doesn't exist.
instead, need iterate i=0 length of ....publicvars.albumlist-1, or, preferably, for(int = 0; < ....publicvars.albumlist.count; i++).
the second potential problem potentially skipping index 0. arrays start @ index 0 , continue index length-1. such, want i++, not ++i. depends on implementation, though.
Comments
Post a Comment