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

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -