Checkbox - bei Hacken wegnehmen soll Fkt. ausführen



  • Hallo
    Ich habe folgende Frage:
    Ich will ein Fkt. ausführenlassen sobald man den Hacken aus einer Checkbox nimmt!
    Für ne Antwort wäre ich sehr dankbar wenns geht mit Bsp.!!
    Mfg Witte

    eMail: witte.martin@gmx.de



  • hallo!

    da kannst du in das OnClick-Event deine aktion reinschreiben und mit einer if-abfrage testen, ob der haken gerade gesetzt ist, also so:

    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
        if( CheckBox1->Checked == false )
        {
            // hier deine Aktion
        }
    }
    

    In den Funktionsrumpf der Funktion gelangst du, wenn du im Objektinspektor für deine CheckBox bei Ereignisse auf "OnClick" doppelklickst.

    Ich hoffe, das hilft dir.

    der oli



  • ja danke habe aber noch ein problem und zwar möchte ich das er wenn ich den Hacken gesetzt habe das das programm dann wieder TForm1 nochmal durchläuft (sozusagen nen realtime checkbox)!!
    hab das ganze schon mit goto probiert das funktioniert aber nur innerhalb 1 Prozedur.
    Ich hoffe irgendjemand kann mir auch dabei helfen!
    Mfg



  • Gast (witte) schrieb:

    das das programm dann wieder TForm1 nochmal durchläuft (sozusagen nen realtime checkbox)

    Die Problembeschreibung ist unverständlich.

    Übrigens: Hacken hat man am Fuss, die hakeligen Dinger hingegen nennt man Haken. 😉



  • ups ich sollte mir das vielleicht immer mal durchlesen was ich schreibe!! danke!
    also folgendes kleines testprogramm:

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
    	: TForm(Owner)
    {
    start:
    Label1->Caption = n;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
    if (n==0)
      {
      n=1;
      goto start;
      }
    else
    n=0;
    }
    

    also beim aufrufen des programms wird es einmal durchlaufen, wenn ich jetzt aber den Haken setze soll sich die ausgabe ändern also das programm ein weiters mal durchlaufen!!! das habe ich versucht mit einer schleife aber die lastet den cpu derbe aus, also habe ich mich mit der goto fkt. beschäftigt aber die scheint nicht zu funktionieren weil es eine andere Prozedur ist wo ich die marke gesetzt hab!!
    ich hoffe jetzt ist es verständlich!!!!
    Danke für eure hilfe!!!!

    Edit:
    Bitte die Code-Tags benutzen. Danke!



  • Pack das Setzen der Caption einfach mit in das OnClick-Event.



  • Ich weiß nicht warum Jansen das nocht net gesagt hat. 😕

    Aber verwende nie GOTO.
    Änder dein Code eher so ab:

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Label1->Caption = n;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
      if (CheckBox1) {
        Label1->Caption=1;
      }
      else {
        Label1->Caption=0;
      }
    }
    

    Sieht besser aus und sollte deine CPU um einiges runter bringen.

    GOTO sind sehr böse und total ungesehen.

    Vergess das GOTO, das ist Batch PRogrammierung und keine C/C++ Programmieren.

    PS: Lern auch mal die Grundlagen der OOP. Und C/C++



  • ...oder du packst deinen auszuführenden Code in einer separaten Funktion.
    (in diesem Fall ist es natürlich nich notwendig, eine separate Funktion zu schreiben, nur um das Caption zu verändern. Wenn aber der gleiche Code abhängig von einer Bedingung auszuführen ist, ist es ratsam, ihn in einer separaten Funktion zu schreiben)

    void __fastcall TForm1::Start(AnsiString s)
    {
      Label1->Caption = s; 
    }
    //--------------------------------------------------------------------------- 
    __fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
    { 
      Start("n"); 
    } 
    //--------------------------------------------------------------------------- 
    void __fastcall TForm1::CheckBox1Click(TObject *Sender) 
    { 
      if (n==0) 
        Start("1"); 
      else 
        Start("0"); 
    } 
    //---------------------------------------------------------------------------
    


  • naja das setzen der Caption in das OnClick-Event geht net weil ich aus mehreren CheckBoxes (die eine bestimmte wertigkeit haben zB:n=2,usw) einen Gesamtwert ausgeben will!!

    Lern auch mal die Grundlagen der OOP. Und C/C++

    Naja ich soll mir das ja beibringen an Hand des Projektes!



  • Warum sollte das nicht gehen? Berechne halt bei jedem OnClick den Gesamtwert neu.

    Besser wäre aber, für alle CheckBoxes dasselbe OnClick-Event zu benutzen. In deinem konkreten Fall bietet es sich ausserdem an, den jeder CheckBox zugeordneten Wert in deren Tag-Property zu speichern.

    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
      TCheckBox *cb = dynamic_cast<TCheckBox *>(Sender);
      if (cb)
      {
        if (cb->Checked)
          n += cb->Tag;
        else
          n -= cb->Tag;
    
        Label1->Caption = n;
      }  
    }
    

    Zu den Details dieses Beispiels siehe u.a. den FAQ-Abschnitt "Komponenten benutzen".


Anmelden zum Antworten