Radiobuttons mit "if-struktur" kombinieren ?!?



  • 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