jeg har en listView Item kontrol på min formular lstEMailListe, med 3 subItems dato, afsender og emne. Det jeg forsøger på, er at udvælge en enkelt linie fra listen, men jeg får hele tiden outofRangeException. Jeg har lagt den på listens egen eventhandler, så det skulle jo være sådan at når man klikkede en gang eller flere så valgte den index på de udvalgte emne. Er der nogen der kan hjælpe, jeg er i det gavmilde hjørne og giver 60 point.
DateTime tidStempel; MailDTO mailDTOData; ListViewItem linie; tidStempel = DateTime.Now; linie = new ListViewItem(); int index = 0; for(int i = 0; i < lstEMailListe.Items.Count; i++) { linie = lstEMailListe.SelectedItems[i]; if(lstEMailListe.Items.Contains(linie)) index = lstEMailListe.Items.IndexOf(linie);
linie = lstEMailListe.Items[index]; }
//opdater teksboks kontroller og listView lstEMailListe.Items.Clear(); linie.SubItems.Add(mailDTOData.tidStempel); linie.SubItems.Add(mailDTOData.mailAdresse_fra); linie.SubItems.Add(mailDTOData.emne); lstEMailListe.Items.Add(linie);
Hej bitsch (sikke et navn, er det selvironi, man kunne jo tro man fornærmede dig ved at kalde dig det!) Nå men mit problem er altså, at når jeg har valgt de udvalgte items, skal man så ikke på en eller anden måde putte dem ned kollektionen af selectedItems. Problemet er bare at man ikke kan skrive noget til selectedItems så jeg har forsøgt mig med nedenstående linie. Det jeg derefter er interesseret i, det er at få fat i index nr.'et på det udvalgte item i selected items. F.eks. kunne det have index nr.'et 3 i den oprindelige kollektion og 0 i den selected kollection. Jeg ved det er 0, fordi jeg vælger kun en linie. Denne ene linie vil jeg gerne have indlæst i den samme ListView control altså lstEMailListe
ListView.SelectedListViewItemCollection selectedItems = new System.Windows.Forms.ListView.SelectedListViewItemCollection(lstEMailListe);
selectedItems[0].ListView.Items[0] = selected; //her ligger problemet //hvordan får jeg selected over i det nye kollektion selectedItems??? //der er heller ikke nogen add metode.
int index = 0; foreach(ListViewItem item in selectedItems) { if(selectedItems.Contains(item)) index = selectedItems.IndexOf(item); }
linie = new ListViewItem(); linie = lstEMailListe.Items[index]; //index'et her skulle gerne være 0 //og ikke 3 som jeg hele tiden får at vide //displayindex 3 out of range!!!
vedr. mit alias, det afhænger jo af om man kan læse eller ej.
Vedr. SelectedItems. Nej du skal ikke sætte noget! Selected Items er din selection som du har foretaget dig i listviewet. Så jeg kan forstå at det du vil er at selecte et item fra kode (og altså ikke vha. manuel håndtering i UI). Indexet afspejler blot den aktuelle placering.
this.listView1.Focus() kaldes blot for at du lettere kan se resultatet! Alternativt kan du sætte HideSelection til false (Så vises din selection også når kontrollen ikke har focus).
Undskyld nu har jeg fundet ud af det Man sætter ikke selected men getter dem med property Selected på lstEMailListe Hvor dum kan man være. Nu virker det fint!
Fint, men hvis su vil selecte kan du gøre som ovenstående. Index er blot en property som du kan anvende til at referere til det enkelte element. Når du har item i hånden er det blot at sætte de aktuelle properties så som Selected.
Og det er naturligvis ikke forkert at skrive ListView1.Items[MyIndex].Selected = true;
Når blot man sørger for at man har en legal index value.
Synes godt om
Ny brugerNybegynder
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.