Problem mit ComboBox



  • Meinst du sowas ?

    void __fastcall TForm1::cbExit(TObject *Sender)
    {
       TStringList *list=new TStringList();
       list->Assign(cb->Items);
       if(!list->Find(cb->Text,0)) cb->Items->Add(cb->Text);
       delete list;
    }
    


  • Die ComboBox soll reagieren, wie man es von Ihr gewohnt ist.

    D.H.

    Es wird etwas ausgewählt -> man arbeitet weiter -> das Ausgewählte ist sichtbar.

    Es wird etwas editiert -> mehr als ein Buchstabe sollte zu sehen/editieren sein.

    Vll hilt doch etwas Code - das hier ist der relevante Teil der Ereignisbehandlungsroutine (OnChange):

    String query, str;
      sql::Results res;
    
      db.connect("siedler.db"); // Datenbank connecten
    
      (..)
    
    // query zusammenbauen
    
      db.execute (query);            // jetzt ID holen
    
      res = db.get_results();
    
      int size = res.size();
    
    //  EdNameSp1->Clear (); // damit wird auch edit feld gelöscht -> unerwünscht
    
      // Nur Combos löschen -> ohne Editfeld
    
      while (EdNameSp1->Items->Count != 0) // ComboBox Einträge löschen
        EdNameSp1->Items->Delete(0);
    
      // Combos füllen
    
      for (int i = 0; i < size; i++)
      {
        str = StdToAnsi(res[i]["Name"].get_asString()); //Stringkonvertierung
    
        EdNameSp1->AddItem(str, 0);
      } // ende for i
    
      if (sp_name[0] != "")
        EdNameSp1->AddItem (sp_name[0],0);
    
    /*  EdNameSp1->ItemIndex = size; // wenn das gesetzt, dann kein sinnvolles Editieren möglich
    
    */
    //  EdNameSp1->Text = sp_name[0];
    
      db.disconnect ();
    

    sp_name[0] ist das erste Element eines String Arrays, welches meine Daten zur weiterverabeitung zwischenspeichert.

    Ich habe das jetzt auch soweit gekürzt, daß nur eine ComboBox zusehen ist -> in Wirklichkeit sind es 6.



  • was bewirkt

    EdNameSp1->Items->Clear ();
    

    statt

    EdNameSp1->Clear ();
    

    ?



  • Die beide wirken sich augenscheinlich genau gleich aus.

    Bei beiden ist jedoch der Cursor stets am Anfang, bei meiner Lösung:

    while (EdNameSp1->Items->Count != 0)
      EdNameSp1->Items->Delete(0);
    

    hier jedoch am Ende ...

    Hmm ...

    Edit: Gibt es eine Möglichkeit den Cursor im Eingabefeld Programmgesteuert zu verschieben?



  • Hallo

    Edit: Gibt es eine Möglichkeit den Cursor im Eingabefeld Programmgesteuert zu verschieben?

    TComboBox::ItemIndex

    bis bald
    akari



  • Genau das funktioniert nicht - dann wird der gesamte Text im Feld markiert. Das hat zur Folge, daß das nächste eingegebene Zeichen alles weitere überschreibt.



  • Hallo

    sorry, hab nicht mitgedacht.
    Du suchst sicher TComboBox::SelStart bzw. TComboBox::Length

    bis bald
    akari



  • Kein Problem - kann passieren

    SelStart passt - damit bekomme ich das gewünschte Ergebnis. Schade nur, daß das in der Hilfe nicht auftauchte ...

    Length im Bezug auf TComboBox kennt er bei mir übrigens nicht.

    Aber danke für die Hilfe



  • Hallo

    *seufz* also noch ein Versuch : TComboBox::SelLength.
    aber beide Sachen stehen in der BCB-Hilfe zu TComboBox.
    Einbißchen mehr Suchwillen ist angebracht.

    bis bald
    akari



  • *rotwerd*

    Ich habe die ganze Zeit bei TComboBox gesucht, und das dort wirklich nicht gefunden. Sonst hätte ich die anderen Fkt. ja auch gefunden.

    Also sorry nochmal und auch danke - Problem ist inzwischen behoben.


Anmelden zum Antworten