Stig Jøran Skrevet 6. mars 2012 Del Skrevet 6. mars 2012 Lurer på hva som må til for og få objektene jeg har laget i en liste, til å vises i en listbox som noe annet enn prosjektnavnet.classnavn. Feks bestemme at en string i hvert objekt skal være det som vises for hvert item i listboxen? Når jeg legger til nye objekter gjør jeg slik: lBoxHosts.Items.Add(new classHost(txtHostName.Text, txtHostIP.Text)); classHost er classen jeg bruker for hvert objekt. Lenke til kommentar
Gjest Skrevet 6. mars 2012 Del Skrevet 6. mars 2012 (endret) Du bruker ToString()-metoden i klassen din. Denne må "overides" i klassen classHost. F.eks: public override string ToString() { return foo.ToString(); } (Tatt fra minne og kan være jeg bommer helt.) Endret 6. mars 2012 av Gjest Lenke til kommentar
Stig Jøran Skrevet 6. mars 2012 Forfatter Del Skrevet 6. mars 2012 Du bruker ToString()-metoden i klassen din. Denne må "overides" i klassen classHost. F.eks: public override string ToString() { return foo.ToString(); } (Tatt fra minne og kan være jeg bommer helt.) Takk! Det gjorde susen! Lenke til kommentar
Cemi Skrevet 6. mars 2012 Del Skrevet 6. mars 2012 (endret) Edit: Ser at jeg var alt for sen, åpnet tråden og så gikk for å teste for å være sikker, og oppdaterte ikke før jeg postet Flott du fikk fikset det. I klassen din legger du inn public override string ToString() { return "dintext"; } Endret 6. mars 2012 av Cemi Lenke til kommentar
Stig Jøran Skrevet 6. mars 2012 Forfatter Del Skrevet 6. mars 2012 Støtte på en ny utfordring. Saken er: Alle objektene i listen har en string som endrer seg. Dvs den som er i ToString-metoden. Leter etter en måte å få oppdatert alle objektene i listen, slik at de får rett informasjon. MS endrer seg hele tiden. Men det som vises i listboxen er fra da objektet ble lagt til. public override string ToString() { string foo = Name + " - " + MS + " ms"; return foo; } Lenke til kommentar
Cemi Skrevet 6. mars 2012 Del Skrevet 6. mars 2012 Dersom du lager en ny klasse istedefor å bruke listbox som ser ut som using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { class RefreshingListbox : ListBox { public new void RefreshItems() { base.RefreshItems(); } } } og kaller "refreshingListBox.RefreshItems()" når en endring har skjedd, så vil de oppdatere seg. Som vist på: http://stackoverflow.com/questions/61421/how-do-i-make-a-listbox-refresh-its-item-text Lenke til kommentar
Stig Jøran Skrevet 7. mars 2012 Forfatter Del Skrevet 7. mars 2012 Dersom du lager en ny klasse istedefor å bruke listbox som ser ut som using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace Test { class RefreshingListbox : ListBox { public new void RefreshItems() { base.RefreshItems(); } } } og kaller "refreshingListBox.RefreshItems()" når en endring har skjedd, så vil de oppdatere seg. Som vist på: http://stackoverflow.com/questions/61421/how-do-i-make-a-listbox-refresh-its-item-text Hvor får du class RefreshingListbox : ListBox Fra? Lenke til kommentar
GeirGrusom Skrevet 7. mars 2012 Del Skrevet 7. mars 2012 RefreshItems er en protected funksjon. Hensikten med koden er å gjøre den public ved å overstyre ListBox klassen og lage en ny funksjon som heter RefreshItems som er public, og kalle den interne funksjonen med samme navn. Lenke til kommentar
Stig Jøran Skrevet 7. mars 2012 Forfatter Del Skrevet 7. mars 2012 RefreshItems er en protected funksjon. Hensikten med koden er å gjøre den public ved å overstyre ListBox klassen og lage en ny funksjon som heter RefreshItems som er public, og kalle den interne funksjonen med samme navn. Men ListBox skal vel være navnet på kontrollen jeg har i formen min? Lenke til kommentar
GeirGrusom Skrevet 7. mars 2012 Del Skrevet 7. mars 2012 Ikke navnet nei. Du har en eller annen ListBox kontroll, la oss kalle den Abc123. Form designeren vil lage skjult kode der det står: private ListBox Abc123; private void InitializeComponents() { Abc123 = new ListBox(); Abc123.Name = "Abc123"; // etc. } Det du vil gjøre, er at FormDesigneren ikke skal benytte ListBox her, men RefreshingListBox istedet, slik at den skaper denne koden: private RefreshingListBox Abc123; private void InitializeComponents() { Abc123 = new RefreshingListBox(); Abc123.Name = "Abc123"; // etc. } Hvis ikke RefreshingListBox dukker opp i toolbox når du kompilerer etter å ha limt inn koden et sted, må du gjøre det litt manuelt: Lukk vindute hvor det står "Form1 [Designer]" (dette er dritviktig, ettersom endringen kan kødde til hele designet) Åpne opp fila Form1.Designer.cs Let etter Abc123 i koden, og bytt ut stedene det står at Abc123 er en ListBox slik at det står at det er en RefreshingListBox. Dette skal være to steder (og koden ligner nogenlunde på det jeg skrev over) Kompiler prosjektet, og så skal du kunne trygt åpne form designeren igjen. Lenke til kommentar
Stig Jøran Skrevet 7. mars 2012 Forfatter Del Skrevet 7. mars 2012 Takker og bukker =) Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå