Radiobuttons mit "if-struktur" kombinieren ?!?



  • Sankt M. schrieb:

    das steht ja alles in der ButtonClick Methode!

    Ich meinte die Click Methode auf dem Menüeintrag.
    Was für ein Menü meinst du denn? Mit Radiobuttons oder eher am oberen Bildschirmrand?
    Oder allgemein, wie sieht die geplante Benutzerführung aus.

    EDIT:

    [b]if(K1)[/b] // K1 Name des MenuItems
    

    Wie wird K1 bestückt?



  • Hallo,

    ja ich mein das Menu am oberen "Bildschirmrand" (MainMenu)! Ich hab da einzelne Unterpunkte bei einem Item und zwar ist K1 ner Name von Kreis (Unterpunkt). Wenn man jetzt auf diesen Unterpunkt klickt sollen sich die Formeln bzw. die Aufgaben ändern (siehe mein post). Jetzt wollte ich das ganze mit einer if-struktur realisieren, jedoch ändern sich die Formeln nicht...

    void __fastcall TForm1::ErgebnisButtonClick(TObject *Sender)
    {
    
    // Kreisberechnung
    if(K1) // Name von Kreis
    {
      if(RadioButton1->Checked) // Umfang
      {
        float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
        String Ergebnis = FloatToStr(2 * r * PI);
        Panel1->Caption = Ergebnis;
        StatusBar1->Panels->Items[2]->Text = " Umfang: " + Ergebnis;
      }
    
      if(RadioButton2->Checked) // Flächeninhalt
      {
        float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
        String Ergebnis = FloatToStr(PI * r * r);
        Panel1->Caption = Ergebnis;
        StatusBar1->Panels->Items[2]->Text = " Flächeninhalt: " + Ergebnis;
      }
    }
    
    if(T1) Test - um zu sehen, ob sich was verändert...  
    {
    if(RadioButton1->Checked) // Umfang
      {
        float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
        String Ergebnis = FloatToStr(2 * r * PI * 3);
        Panel1->Caption = Ergebnis;
        StatusBar1->Panels->Items[2]->Text = " Umfang: " + Ergebnis;
      }
    
      if(RadioButton2->Checked) // Flächeninhalt
      {
        float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
        String Ergebnis = FloatToStr(PI * r * r * 3);
        Panel1->Caption = Ergebnis;
        StatusBar1->Panels->Items[2]->Text = " Flächeninhalt: " + Ergebnis;
      }
    }
    
    }
    

    Ich hab echt keinen Plan, wie ich noch machen könnte...

    MFG
    Sankt M.



  • Ich glaube, dass nur recht wenige Leute (mich ausgeschlossen) sich vorstellen können, was Du programmieren willst. Ein MainMenu, das irgendwie mit der Ereignisbehandlungsroutine eines Buttons in Verbindung steht, mehrere RadioButtons und ein Kreis. Entweder stehe ich gerade sehr auf dem Schlauch, oder Deine Beschreibung ist einfach zu wage, um effektiv helfen zu können.

    Warum nutzt Du nicht den Debugger? Schrieb akari bereits...
    Warum nutzt Du nicht die Ereignisse des MainMenues und dessen SubItems? Schrieb Fincki bereits...



  • Hallo,

    ich will einfach eine oder mehrere "MenuPunkte" (in diesem Fall Kreis (K1) ), die jeweils verschiedene Formeln, wenn sie gedrückt werden, ausführen.

    Ich hab versucht das mit einer if-struktur zu realisieren, jedoch wechselt sich das Ergebnis(Formel) nicht.

    MFG



  • K1 und T1 sind also TMenuItems? wenn ja dann macht deine If-Abfrage keinen Sinn, da du nur den Zeiger abfragst und der ist ja immer da

    Sankt M. schrieb:

    Hallo,
    ich will einfach eine oder mehrere "MenuPunkte" (in diesem Fall Kreis (K1) ), die jeweils verschiedene Formeln, wenn sie gedrückt werden, ausführen.

    dafür gibt es die OnClick-Ereignisse der TMenuItems

    wenn du allerdings die "ErgebnisButtonClick"-Funktion mit den jeweiligen OnClick-Ereignissen des Menüs/RadioButtons verbunden haben solltest, mußt du den Sender auswerten -> siehe FAQ



  • Hallo,

    wie siehts denn aus wenn ich einfach auf das OnClick ereigniss zugreife ? (D1->OnClick) ; (T1->OnClick) ??

    MFG



  • Sankt M. schrieb:

    Hallo,

    wie siehts denn aus wenn ich einfach auf das OnClick ereigniss zugreife ? (D1->OnClick) ; (T1->OnClick) ??

    MFG

    Um das Ereigniss zu erzeugen klickst du in der IDE auf den Menüeintrag, dann wird automatisch eine Funktion erzeugt:

    void __fastcall TfrmMain::D1Click(TObject *Sender)
    {
    
    }
    //---------------------------------------------------------------------------
    


  • Wie wäre es mit einem Tab-Sheet anstatt einem Menu?



  • void __fastcall TfrmMain::D1Click(TObject *Sender)
    {
    ErgebnisButtonClick (Sender);  
    }
    
    void __fastcall TfrmMain::T1Click(TObject *Sender)
    {
    ErgebnisButtonClick (Sender);  
    }
    

    - "so habe ich es gemacht"... - habe zuvor noch nie sowas gemacht...

    Funktioniert nicht..

    MFG



  • Sankt M. schrieb:

    Funktioniert nicht..

    Hey, klasse Fehlerbeschreibung...



  • @Sankt M.
    das ist soweit ja auch nicht falsch, aber hast du dir den Beitrag in der FAQ schonmal angeschaut? das ist nämlich genau das was du in dem Fall brauchst, wobei hier nicht TButton sondern TMenuItem die gesuchte Klasse ist



  • Hallo,

    danke! Jetzt bekomme ich eine Fehlermeldung ('D1' ist kein Element von 'MenuItem') - Warum ??

    dynamic_cast<TMenuItem*>(Sender)->D1;
    

    MFG



  • du solltest dir wirklich nochmal den FAQ Beitrag durchlesen und dabei dein Gehirn anschalten, außerdem empfehle ich die BCB-Hilfe zu TMenuItem, da dort alle Eigenschaften aufgelistet und beschrieben stehen, z.B. die Eigenschaft Name



  • Ohje....

    void __fastcall TForm1::D1Click(TObject *Sender)
    {
      dynamic_cast<TMenuItem*>(Sender)->Name;
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::K1Click(TObject *Sender)
    {
      dynamic_cast<TMenuItem*>(Sender)->Name; 
    }
    

    .. Ich weiss ehrlich nicht wie ich das am besten unterbringen soll ... ?

    Wie bringe ich das jetzt in eine "if-struktur" ?

    MFG



  • oh man, jetzt wir mir das langsam zu blöd hier

    void __fastcall TfrmMain::D1Click(TObject *Sender) 
    { 
    ErgebnisButtonClick (Sender);   
    } 
    void __fastcall TfrmMain::T1Click(TObject *Sender) 
    { 
    ErgebnisButtonClick (Sender);   
    } 
    
    void __fastcall TForm1::ErgebnisButtonClick(TObject *Sender) 
    { 
    TMenuItem *Item = dynamic_cast<TMenuItem*>(Sender);
    if ( !(Item && Item->ClassNameIs("TMenuItem")) ) return;
    if(Item->Name == "K1") 
    { 
    ...
    } 
    else if(Item->Name == "T1")  
    {
    ...
    } 
    }
    


  • Hallo,

    danke funktioniert! Das Problem, das ich jetzt habe ist, dass die "if Anweisungen" in der "if Anweisung" nicht mehr funktionieren. (Das Ergebnis kommt nur durch die Menupunkte (K1 & D1)...

    Die Fett markierte Stelle ist die, die nicht funktioniert (wird nicht ignoriert - passiert überhaupt nichts..)

    [cpp]void __fastcall TForm1::ErgebnisButtonClick(TObject *Sender)
    {
    TMenuItem *Item = dynamic_cast<TMenuItem*>(Sender);
    if ( !(Item && Item->ClassNameIs("TMenuItem")) )
    return;

    // Kreisberechnung
    if(Item->Name == "K1")
    {
    **if(RadioButton1->Checked) // Umfang
    {
    float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
    String Ergebnis = FloatToStr(2 * r * PI);
    Panel1->Caption = Ergebnis;
    StatusBar1->Panels->Items[2]->Text = " Umfang: " + Ergebnis;
    }

    if(RadioButton2->Checked) // Flächeninhalt
    {
    float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
    String Ergebnis = FloatToStr(PI * r * r);
    Panel1->Caption = Ergebnis;
    StatusBar1->Panels->Items[2]->Text = " Flächeninhalt: " + Ergebnis;
    }**}

    }
    else if(Item->Name == "D1")
    {
    **if(RadioButton1->Checked) // Umfang
    {
    float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
    String Ergebnis = FloatToStr(r*r*r); //Nur als Beispiel
    Panel1->Caption = Ergebnis;
    StatusBar1->Panels->Items[2]->Text = " Umfang: " + Ergebnis;
    }

    if(RadioButton2->Checked) // Flächeninhalt
    {
    float r = StrToFloatDef(Edit1->Text, 0); // r = Radius (User)
    String Ergebnis = FloatToStr(PI * r * r) //Nur als Beispiel
    Panel1->Caption = Ergebnis;
    StatusBar1->Panels->Items[2]->Text = " Flächeninhalt: " + Ergebnis;
    }**}
    }
    }[/cpp]

    MFG


Anmelden zum Antworten