Gå til innhold

C#: [Løst] Vise en liste med objekter i en listbox, bestemme hva som vises


Anbefalte innlegg

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
Videoannonse
Annonse

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 av Gjest
Lenke til kommentar

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 av Cemi
Lenke til kommentar

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

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

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

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...