Avatar billede leon_hunt Nybegynder
03. marts 2004 - 20:28 Der er 4 kommentarer og
1 løsning

"Synkronisere" flere Listbox

Hej,

Jeg har følgende problemstilling i C++ Builder 6.

På en form har jeg 4 listboxes, og jeg vil gerne have at når jeg klikker på et item i den ene listbox, så skal den automatisk select/highlighte/gøre blå? De items som har samme ItemIndex i de andre listboxe.
Avatar billede coldplay Nybegynder
04. marts 2004 - 00:58 #1
Du skal bruge en "OnClick" eventhandler for hver listbox. Med 4 listboxe bruges følgende kode, hvis et valg af et item i en vilkårlig listbox skal gælde for det samme ItemIndex i de andre listboxe:

void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
    ListBox2->ItemIndex = ListBox1->ItemIndex;
    ListBox3->ItemIndex = ListBox1->ItemIndex;
    ListBox4->ItemIndex = ListBox1->ItemIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox2Click(TObject *Sender)
{
    ListBox1->ItemIndex = ListBox2->ItemIndex;
    ListBox3->ItemIndex = ListBox2->ItemIndex;
    ListBox4->ItemIndex = ListBox2->ItemIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox3Click(TObject *Sender)
{
    ListBox1->ItemIndex = ListBox3->ItemIndex;
    ListBox2->ItemIndex = ListBox3->ItemIndex;
    ListBox4->ItemIndex = ListBox3->ItemIndex;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox4Click(TObject *Sender)
{
    ListBox1->ItemIndex = ListBox4->ItemIndex;
    ListBox2->ItemIndex = ListBox4->ItemIndex;
    ListBox3->ItemIndex = ListBox4->ItemIndex;
}
Avatar billede leon_hunt Nybegynder
04. marts 2004 - 03:31 #2
Nå er det bare sådan ?
Jeg var ude i noget af det rigtige kan jeg se, bare meget mere kompliceret (læs rodet) :P

Mange tak for den smarte kode :D
Avatar billede coldplay Nybegynder
04. marts 2004 - 09:20 #3
Det er altid en fornøjelse, når det er til hjælp :-)

Iøvrigt kan du kombinere hele koden ind i en eventhandler, sådan her:

void __fastcall TForm1::ListBoxClick(TObject *Sender)
{
    ListBox2->ItemIndex = ListBox1->ItemIndex;
    ListBox3->ItemIndex = ListBox1->ItemIndex;
    ListBox4->ItemIndex = ListBox1->ItemIndex;
    //
    ListBox1->ItemIndex = ListBox2->ItemIndex;
    ListBox3->ItemIndex = ListBox2->ItemIndex;
    ListBox4->ItemIndex = ListBox2->ItemIndex;
    //
    ListBox1->ItemIndex = ListBox3->ItemIndex;
    ListBox2->ItemIndex = ListBox3->ItemIndex;
    ListBox4->ItemIndex = ListBox3->ItemIndex;
    //
    ListBox1->ItemIndex = ListBox4->ItemIndex;
    ListBox2->ItemIndex = ListBox4->ItemIndex;
    ListBox3->ItemIndex = ListBox4->ItemIndex;
}

I hver "OnClick" eventhandler refererer du blot til den samme handler, her vil det så være "ListBoxClick".

Tak for pointene ;-)
Avatar billede jpk Nybegynder
04. marts 2004 - 11:25 #4
Nu bruger jeg ikke Builder, men hvad indeholder "Sender"?

Hvis den indeholder en pointer til den listbox der blev klikket på, kunne man så ikke:

void __fastcall TForm1::ListBoxClick(TObject *Sender)
{
    ListBox1->ItemIndex = ListBox2->ItemIndex = ListBox3->ItemIndex = ListBox4->ItemIndex = ((TListBox*)Sender)->ItemIndex;
}

Jeg ved altså ikke om det er tilfældet, men bare et forslag...
Avatar billede coldplay Nybegynder
04. marts 2004 - 12:48 #5
Sender peger på den listbox, der aktuelt aktiveres ved et et klik på et item.

Sender er en generel pointer, der peger på et objekt (af typen TListBox f.eks), når en given eventhandler for dette objekt aktiveres.

Dit forslag lyder fornuftigt. Har ikke prøvet det, men jeg kan ikke se, at der skulle være noget problem med din konstruktion.
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
Kurser inden for grundlæggende programmering

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