Markierte ListBox-Einträge 2er ListBoxen sollen Synchron bleiben...



  • Hat niemand ne Ahnung? 😕 😕 😕



  • Probier mal:

    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
      for (int i=0;i<ListBox1->Items->Count;i++)
      {
        ListBox2->Selected[i]=ListBox1->Selected[i];
      }
    }
    

    Beide ListBox->MultiSelect=true!!!
    Anzahl der Eintraege muss stimmen.

    PS: Nimm besser 1x ListView!!!



  • @aaaabyx: Das Ereignis wird automatisch ausgelöst! Du musst ihm das nur sagen! Und das machst du in SetItemIndex!



  • @Eßer:
    OK aber wie denn???



    • Neue Kompo von TListBox ableiten
    • unter private: TNotifyEvent FOnChange;
    • unter protected: virtual void __fastcall SetItemIndex(const int value);
    • unter __published: TNotifyEvent OnChange = {read = FOnChange; write = FOnChange};
    • Im Konstruktor: OnChange = NULL;
    • In der SetItemIndex:
    virtual void __fastcall TMyListBox::SetItemIndex(const int value)
    {
        inherited::SetItemIndex(value);
        if(OnChange)
            OnChange(this);
    }
    

    [ Dieser Beitrag wurde am 18.05.2003 um 21:19 Uhr von Eßer editiert. ]



  • warum nicht im OnClick die indizes gleich setzen?



  • Original erstellt von Sunday:
    warum nicht im OnClick die indizes gleich setzen?

    Weil man die Auswahl auch per Tastatur oder per Code ändern kann? 😉



  • @Eßer: Danke, aber ich bekomme da genze 5 Compilerfehler...
    Und ich weiß nicht genau, wie du dir das gedacht hast, könntest du bitte mal kurz schildern, was genau da dann ablaufen soll?
    Danke...



  • bei mir wird OnClick sowohl für maus als auch tastatur ausgelöst. nur net für explizites setzen im code, aber da hilft folgendes. ist doch viel einfacher, als ne extra-komponente zu erstellen...

    //---------------------------------------------------------------------------
    // wird beim klicken mit der maus in der listbox auf ein item ausgelöst
    // und beim ändern des indizes über die tastatur
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Click(TObject *Sender)
    {
      ListBox2->ItemIndex = ListBox1->ItemIndex;
    }
    
    //---------------------------------------------------------------------------
    // beim klick auf nen button soll der index geändert werden
    // änderung erzwingen
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
      ListBox1->ItemIndex = 2;
      ListBox1Click(Sender);
    }
    //---------------------------------------------------------------------------
    


  • Danke SUnday, das funzt prima!


Anmelden zum Antworten