ListBox über ComboBox



  • Also für Überschriftendarstellungen ist die ComboBox völlig ungeeignet.

    Wenn Du dem Anwender aber signalisieren willst, daß er in der ComboBox was auswählen soll, dann nimm doch "Wählen" als ersten Eintrag auf und zeig den an. Zusammen mit dem Mode "csDropDownList". Damit sind die Einträge nicht mehr editierbar.

    Dann stellst Du sicher, daß vor einer Berechnung oder Aktion die ComboBox mit einem gültigen Wert gefüllt ist. Ist das nicht der Fall, setzt Du den Focus auf die ComboBox und zwingst damit den Anwender, etwas auszuwählen. Unterstützen könnte man das noch durch Ausgabe eines entsprechenden Hinweistextes.

    Wenn Dich der "Wählen" Text in der ComboBox als Eintrag stört, dann kannst Du den auch nachträglich entfernen, sobald der User einen Eintrag ausgewählt hat (im OnChange-Ereignis).....



  • Ich würde OnDropDown und OnCloseUp benutzen. Dort kannst du das Zusatzitem mit der "Überschrift" zB. mit DeleteSelected() entfernen (OnDropDown) und, falls kein Item selektiert wurde, wieder hinzufügen (OnCloseUp).



  • Da spricht halt wieder der Meister 😉



  • Für eine Sekunde dachte ich, du meinst mich ... 😉



  • Hallo,

    setze einfach zur Entwurfszeit die Einträge der ComboBox,
    Setze die ComboBox auf csDropDownList.

    Zur Laufzeit z.B. im OnCreate Ereignis folgender Text:

    ComboBox1->ItemIndex=0;
     ComboBox1->Text=ComboBox1->Items->Strings[ComboBox1->ItemIndex];
    

    ...fertich



  • Und was hat er davon? Das kann er doch schon zur Entwurfszeit im OI erledigen!?

    Mal ganz abgesehen davon, dass deine zweite Zeile a) sinnlos ist (bei csDropDownList hat das Setzen der Text-Property keine Wirkung) und b) völlig überflüssig ist, da der angezeigte Text schon durch das Setzen des ItemIndex festgelegt wurde. 😉



  • Also bei mir ist das so, wenn ich eine ComboBox auf csDropDownList setze kann ich zur Entwurfszeit die Eigenschaft Text nicht setzen.
    Die ist nämlich leer !
    Unabhängig davon, ob Items eingetragen sind oder nicht...

    Man kann auch während der Laufzeit den Text nur mit Werten füllen, die unter Items eingetragen sind.

    Probier es mal aus...



  • Original erstellt von <Daniel666>:
    Man kann auch während der Laufzeit den Text nur mit Werten füllen, die unter Items eingetragen sind.

    Genau, das machst du aber nicht direkt über die Text-Property sondern indirekt über den ItemIndex. Und letzteres funktioniert auch zur Entwurfszeit.

    Probier es mal aus...

    Wollt ich dir auch grad empfehlen. 😉
    Lass einfach deine zweite Zeile weg und staune ...



  • ok...ok...
    die zweite Zeile ist zur Laufzeit überflüssig.
    Kann es sein, daß das beim CBuilder3 so gemacht werden musste ?
    Bin nämlcigh erst kürzlich auf den 5er umgestiegen...

    Dennoch zur Entwurfszeit kann ich nicht auf die Eigenschaft ItemIndex bzw. Text
    zugreifen. Hab ich zumindest nix gefunden.



  • Offensichtlich ist der ItemIndex-Eintrag im OI beim BCB6 neu eingeführt worden.

    Ich kenne den BCB3 zwar nicht, kann mir aber nicht vorstellen, dass sich die Text-Property bei csDropDownList dort anders verhalten hat.


Anmelden zum Antworten