Avatar billede majbom Novice
03. februar 2006 - 23:43 Der er 7 kommentarer og
1 løsning

enumeration already finished

g'aften

sidder her og kan ikke komme videre:

try
{
  IEnumerator selCol = lvwOrders.SelectedItems.GetEnumerator();
  selCol.MoveNext();
  ListViewItem lvi = (ListViewItem)selCol.Current;
  MessageBox.Show(lvi.SubItems[4].Text.ToString());
}
catch (Exception ex)
{
  MessageBox.Show(ex.ToString());
}

første gang jeg trykker på en linje i listview'er virker det fint, men anden gang får jeg en exception: "enumeration already finished" - jeg har prøvet at sætte både "selCol" og "lvi" til "null", men den bliver ved...

hvordan kommer jeg uden om det?

på forhånd tak
Avatar billede lifo Nybegynder
04. februar 2006 - 01:28 #1
hvad er det du vil ?
noget i denne stil



foreach(ListViewItem item in lvwOrders.SelectedItems)
{
MessageBox.Show("subitem 4 text"+ item.SubItems[4].Text);
}
Avatar billede _codefusion_ Nybegynder
04. februar 2006 - 08:30 #2
lifo har ret, den mindst besværlige måde (og efter min mening den rigtige måde) at gøre det på er ved ovenstående eksempel.

I den kode du har skrevet skal du bare tilføje linien:
selCol.Reset();
inden du kalder selCol.MoveNext();
Altså:
try
{
  IEnumerator selCol = lvwOrders.SelectedItems.GetEnumerator();
  selCol.Reset();
  selCol.MoveNext();
  ListViewItem lvi = (ListViewItem)selCol.Current;
  MessageBox.Show(lvi.SubItems[4].Text.ToString());
}
catch (Exception ex)
{
  MessageBox.Show(ex.ToString());
}
Avatar billede bitsch Nybegynder
04. februar 2006 - 09:10 #3
Øhm? hvorfor. Når der nu i C# er en pæn måde at abstrahere fra sin iterator, så bør man bruge denne. Med andre ord så antager jeg at lifo er den rigtige løsning, men begge vil naturligvis give samme resultat.
Avatar billede bitsch Nybegynder
04. februar 2006 - 09:11 #4
Undskyld... Jeg misforstod din tekst. Vi er alle enige, sorry
Avatar billede majbom Novice
04. februar 2006 - 11:40 #5
hejsa, jeg har nok forklaret mig lidt dårligt...

jeg vil gerne gave at der kommer en msgbox op når man klikker på en række, når man så klikker på en ny række skal der bare komme en ny msgbox (self først når man har trykket ok i den forrige)
jeg har også prøvet med selCol.reset, men det kunne jeg heller ikke få til at spille, jeg satte den dog i nederst i try{}-delen, idet jeg så regnede med at den var resat til næste gang den kom derind...
Avatar billede bitsch Nybegynder
04. februar 2006 - 12:53 #6
I såfald skal du jo blot lytte til de click events som dit ListView fyrer.

Nedenståede viser en stump kode som subscriber til MouseDoubleClick.

Håber at jeg har forstået din problemstilling, ellers må d lige uddybe yderligere.

        private void listView1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            foreach (System.Windows.Forms.ListViewItem item in            this.listView1.SelectedItems)
            {
                MessageBox.Show(string.Format("Item:{0}", item.Text));
            }
        }
Avatar billede majbom Novice
04. februar 2006 - 14:48 #7
-> bitsch - tak det virker... det der med enumerator er noget jeg har taget fra et eksempel jeg fandt på nettet et sted...
Avatar billede bitsch Nybegynder
04. februar 2006 - 17:10 #8
Det har nok været fra en C++ programmør ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester