Индекс был вне досягаемости. Должно быть неотрицательным и меньше размера коллекции.
could please help me to find a solution? I am trying to fill in the flowlayoutpanel1 with 9 items associated with an event. I'm using next and previous buttons to navigate through it, but when I click the previous button I face index was out of range problem with clicking one of the items as well flowlayoutpanel1 decreased to 6 items:
Что я уже пробовал:
private void frmelection_Load(object sender, EventArgs e) { Cards = new List<Candidate>(); btnprevious.Enabled = false; var cand = cancontroller.GetAllCandidates(); if (cand.Count() <= 9) { btnnext.Enabled = false; } foreach (var i in cand) { Cards.Add(new Candidate{ ID=i.ID, name=i.name, candidatepic=i.candidatepic, logoID=i.logoID }); } for (int i = 0; i < 9; i++) { //Check if Cards Has the Index if (Cards.Count - 1 < i) break; indexer++; Candpanel c = new Candpanel(); c.Controls.Add(addlblID(Cards[i].ID)); c.Controls.Add(addlblName(Cards[i].name)); c.Controls.Add(addpic(Cards[i])); flowLayoutPanel1.Controls.Add(c); c.DoubleClick += new EventHandler((s, ee) => this.CandpanelDoubleClick(s, e, Cards[i])); } } private void btnprevious_Click(object sender, EventArgs e) { FLPContainer.Controls.Clear(); btnnext.Enabled = true; var index = indexer - 9; try { for (int i = index; i >= 0; i--) { //Check if Cards Has the Index if (Cards.Count - 1 < i) break; // Preventing User From Going Forward Case the List is Back Default if (i == 9) btnprevious.Enabled = false; indexer++; var c = new Candpanel(); c.Controls.Add(addlblID(Cards[i].ID)); c.Controls.Add(addlblName(Cards[i].name)); c.Controls.Add(addpic(Cards[i])); c.DoubleClick += new EventHandler((s, ee) => this.CandpanelDoubleClick(s, e, Cards[i])); flowLayoutPanel1.Controls.Add(c); } } catch { return; } }
Luc Pattyn
catch { return; }
игнорировать подобные исключения - ужасная идея. Они дают первый ключ к разгадке, когда все идет ужасно неправильно, поэтому всегда убедитесь, что вы их видите.
Richard MacCutchan
Кроме того, вы используете жестко закодированный лимит цикла в 9, но используете карты.Считайте, чтобы вырваться из петли. Используйте только карты.Считайте, так как это единственное, что гарантированно будет точным.