Avatar billede hmortensen Nybegynder
28. august 2005 - 20:45 Der er 8 kommentarer og
1 løsning

Listbox text

Hejsa

Jeg har en winform, hvor jeg har en listbox.
Der har jeg så listet nogle brugere med fornavn og efternavn, men er det så muligt at få den til at sende et id istedet for navnet ?

Mvh.
H. Mortensen
Avatar billede arne_v Ekspert
28. august 2005 - 21:01 #1
sende et id ? hvad hvor hvordan ?
Avatar billede hmortensen Nybegynder
28. august 2005 - 21:03 #2
Prøver igen.

Jeg har nogle bruger med oplysninger som fornavn, efternavn, unikt nr.
Så vil jeg gerne liste dem i listbox'en med "fornavn efternavn", men når jeg henter listbox.text vil jeg gerne have det unikke nr, hvis man kan sætte det med som et slags id.
Avatar billede driis Nybegynder
28. august 2005 - 22:20 #3
Items i listboksen kan være objekter af en hvilkensomhelst type, og det felt der skal vises kan sættes med ListBox.DisplayMember. Så kan du f.eks.:

public struct NameAndId
{
  public int Id;
  public string Name;
}

Og et sted i din winform:
// fyld listboks fra en datakilde, her illustreret ved manuelt at lave et enkelt element:
NameAndId nai;
nai.Id = 1;
nai.Name = "Karl";
ListBox1.Items.Add(nai);
ListBox1.DisplayMember = "Name";

Jeg antager at det er cirka det du vil opnå. Når du så ønsker at aflæse det valgte element skal du caste til et NameAndId objekt:
if ( ListBox1.SelectedItem is NameAndId )
{
  NameAndId sel = (NameAndId)ListBox1.SelectedItem;
  // do stuff
  ...
  ...
  ...
}

If sætningen er strengt taget ikke nødvendig hvis du kun fylder NameAndId objekter i din ListBox.
Avatar billede driis Nybegynder
28. august 2005 - 22:21 #4
DisplayMember behøver du naturligvis kun at sætte én gang.
Avatar billede hmortensen Nybegynder
28. august 2005 - 22:34 #5
Synes ikke jeg kan få det til at virke.
Det ser nu sådan her ud:
public struct NavnKundeNr
{
    public int KundeNr;
    public string Navn;
}

private void OpdaterListBox()
{
    NavnKundeNr nk;
    listBox1.DisplayMember = "Navn";
    foreach (Kunde kunde in kunder.HentKunde)
    {
        nk.KundeNr = kunde.KundeNr;
        nk.Navn = kunde.Fornavn;
        listBox1.Items.Add(nk);
    }
    textBox5.Clear();
    textBox6.Clear();
    textBox7.Clear();
    textBox8.Clear();
}
Avatar billede driis Nybegynder
28. august 2005 - 23:00 #6
Hvad er problemet præcist ? Ovenstående adder jo kun elementer til listbox'en.
Får du problemer når du henter data ud ? (Og i så fald, hvordan gør du det ?)

I øvrigt behøver du ikke struct'en NavnKundeNr når du allerede har defineret en klasse "Kunde" med de nødvendige egenskaber. Så du kan blot:
    foreach (Kunde kunde in kunder.HentKunde)
    {       
        listBox1.Items.Add(kunde);
    }
Avatar billede hmortensen Nybegynder
28. august 2005 - 23:38 #7
Nu har jeg fået den til at liste fornavn. Kan jeg lave en sammensat displaymember, så der står:
"fornavn efternavn" ?
Avatar billede driis Nybegynder
29. august 2005 - 11:23 #8
Nej, men du kan blot lave en property, f.eks. FullName i klassen Kunde:
public string FullName
{
  get { return FirstName + " " + " LastName; }
}
Avatar billede hmortensen Nybegynder
29. august 2005 - 11:33 #9
Det har jeg lavet, men tænkte om den kunne spares væk.

Mange tak for hjælpen. Det virker tilfredsstillende nu.
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