ListBox-Auswahl => Dynamisches Formular



  • Hi,

    ist es möglich sich auf einem Formular, je nach ausgewähltem Eintrag in einer Listbox, bestimmte Felder auf dem Formular ein bzw auszublenden oder auszugrauen?
    Das ganze ohne für jeden Fall ein eigenes Formular zu erstellen....

    Vielen Dank für eure Hilfe 😋



  • Hallo

    Ja. Stichworte sind if, switch, ItemIndex, Visible, Enabled.

    bis bald
    akari



  • soweit so gut... aber kann man irgendwie umgehen, dass wenn die combobox per itemindex vorbelegt wird die felder nicht sofort ausgegraut werden, wie ich das beim onChange ereignis der box festgelegt habt?
    ein onLoad oder onShow gibts bei einer combobox ja nicht....



  • Hallo

    Also bei meinem BCB5 führt das manuelle Setzen des ItemIndex nicht zu einem Auslösen des OnChange-Events.

    BCB-Hilfe schrieb:

    OnChange tritt nur als Reaktion auf Benutzeraktionen ein. Wenn die Eigenschaft Text programmgesteuert geändert wird, wird das Ereignis OnChange nicht ausgelöst.

    😕

    Du könntest ja den Event der ComboBox vorher auf 0 setzen und danach wieder auf die richtige Methode.

    bis bald
    akari



  • Hallo,

    Häng den OnChange-Event dabei kurz aus. Sonst wird er ja beim setzen von ItemIndex ausgeführt. Als Alternative könntest du mit HIlfe einer bool-Variable in OnChange deinen Code ausführen oder nicht. Die setzt du dann einfach auf false vor setzen des ItemIndex.
    Bsp. 1

    //Event aushängen
    combobox->OnChange = 0;
    combobox->ItemIndex = 0;
    combobox->OnChange = comboboxChange;
    

    Bsp. 2

    // In private der Form ist bool AllowChange deklariert. Im Konstruktor dann auf true gesetzt
    AllowChange = false;
    combobox->ItemIndex = 0;
    AllowChange = true;
    
    // Dann in OnChange
    void __fastcall comboboxChange(TObject* Sender)
    {
       if( AllowChange)
       {
    // hier nun dein Code
       }
    }
    


  • hi
    ich habe mich falsch ausgedrückt.... ich will das onchange ereignis ja gar nich aussetzen.... ich will das schon beim laden des Formulars und dem damitverbundenen setzen des itemindex meine anweisungen aus dem onchange-ereignis aus geführt werden.... aber das tun sie komischer weise nicht, obwohl sie das wie ich das aus euren beiträgen sehe tun sollten!?



  • Aha.
    Du kannst ja auch die OnChange-Methode direkt selber aufrufen. Besser finde ich es aber, wenn du den Code aus der OnChange in eine separate Funktion packst, die du dann nach Belieben aufrufen kannst.



  • Hallo

    Nein das Event wird nur durch den Benutzer auslgelöst, nicht durch Programmaktionen. Deshalb mein Zitat aus der Builder-Hilfe.
    Du must also nur bei Programmstart die Eventfunktion manuell aufrufen

    comboboxChange(NULL);
    

    bis bald
    akari



  • ja das ist schon klar 🙂
    aber wo soll ich den code bzw. die funktion noch einbauen?
    habs auch schon probiert bei formshow bzw formcreate zu verwenden, was keinen erfolg brachte 😞



  • Hallo

    Nach der Initialisation, am besten im Konstruktor, und nachdem du manuell einen ItemIndex zugewiesen hast. OnCreate sollte man gar nicht verwenden und OnShow ist wahrscheinlich auch nicht passend.

    bis bald
    akari



  • wunderbar... es klappt!
    Vielen Dank für die prompte Hilfe.... wäre ich wohl allein heut nich mehr drauf gekommen;-)


Anmelden zum Antworten