Delegaten
-
Hier die Doku zur Klasse RadioButton:
http://msdn.microsoft.com/en-us/library/system.windows.forms.radiobutton.aspxGuck Dir deinen Code genau an.
Ich nehme an, Du möchtest Dich auf das CheckedChanged Event abonnieren.
-
Ich habe es jetzt mal so ausprobiert:
if (radioButtonMultiplikation->Checked){ radioButtonMultiplikation->CheckedChanged += gcnew System::EventHandler(this, &Form1::buttonBerechnen_Click);
bekomme jetzt keine Fehlermeldung mehr, aber es passiert auch nichts...
-
Benutze den Debugger
-
Tut mir leid, entweder verstehe ich den Debugger nicht oder ich weiß es einfach nicht... Ich bin das Programm im Einzelschritt durchgegangen.. wenn ich an der stelle ankomme wirft er mir keinen Fehler aus!
Mach ich was falsch?
-
Und in Form1::buttonBerechnen_Click kommst Du durch? (Du musst dort einen Breakpoint setzen.)
-
Geht dein Programm überhaupt in eine der if()-Anweisungen rein? Nach meinem Verständnis besagt "Checked", daß der Button gerade ausgewählt ist - und das dürfte auf maximal einen deiner Buttons zutreffen.
-
Der Haltepunkt sitzt dort! Und er zeigt mir keinen Fehler an!
Ist es denn richtig das ich den Code im Konstruktor habe?
Was ist denn Falsch an meinem Ansatz?
-
Wenn ich doch aber einen Auswähle also Checked dann soll er den ButtonBerechnen ausführen, ohne das ich Ihn anklicke.. mit dem Debugger habe ich noch nicht so oft gearbeitet, erkenne nicht ob er im If Zeig ist.
-
Der Debugger kann auch Schritt für Schritt durch den Code laufen und dir unterwegs auch auswerten, was tatsächlich in den Variablen drinsteht.
Dein Problem könnte daran liegen, daß der Code zum Registrieren der Event-Handler nur ein mal ausgeführt wird (beim Anlegen der Form) und dort ist von den Radio-Buttons noch keiner gesetzt, also schlagen die if()-Bedingungen fehl und du registrierst keinen der Handler.
-
Wie kann ich denn später auf den if Zweig verweisen? Ich könnte ein checkedChanged Ereignis auf die jeweiligen RadioButton setzen, aber so möchte ich es eigentlich nicht haben! Die Variante habe ich schon probiert!
-
Wieso brauchst du denn überhaupt die if-Bedingung - du willst doch auf jeden Fall den Event-Handler aufrufen (der dann vermutlich überprüft, welcher der Radio-Buttons aktiv ist).
-
Die if Anweisung brauche ich nicht unbedingt, wollte damit nur abfragen ob der RadioButton ausgewählt ist. Wenn du eine andere Möglichkeit hast wäre ich auch glücklich
-
Die Abfrage, ob bzw. welcher Radio-Button aktiv ist, benötigst du erst, wenn das Ereignis auftritt, d.h. innerhalb deiner buttonBerechnen_Click()-Methode. Im Form-Konstruktor solltest du alle vier Radio-Buttons mit der Funktion verbinden.
-
Könntest du mir dafür eine kleine Hilfestellung geben?
-
Warum im ButtonBerechnen_Click() ? Das Ereignis tritt doch unabhängig vom Button auf!? Der Button soll nur Betätigt werden wenn das Ereignis auftritt!
Mit folgendem Code funktioniert es;
private: System::Void radioButtonAddition_CheckedChanged(System::Object^ sender, System::EventArgs^ e) { if (radioButtonAddition->Checked == true) { radioButtonAddition->CheckedChanged += gcnew System::EventHandler(this, &Form1::buttonBerechnen_Click); } }
Ich möchte es nur nicht mit dem Ereignis durchführen, sondern im Kontruktor direkt!
-
Ich habe es jetzt geschafft...
Man kann im Konstruktor einfach die If anweisung weglassen, dann klappt es ohne Probleme!public: Form1(void) { InitializeComponent(); // //TODO: Konstruktorcode hier hinzufügen. // radioButtonAddition->CheckedChanged += gcnew System::EventHandler(this, &Form1::buttonBerechnen_Click); }
-
manu89 schrieb:
Warum im ButtonBerechnen_Click() ? Das Ereignis tritt doch unabhängig vom Button auf!? Der Button soll nur Betätigt werden wenn das Ereignis auftritt!
Den Methodennamen hast du doch selber gewählt
Nochmal langsam für dich und alle anderen zum Mitschreiben:
Im Konstruktor setzt du die Event-Handler für alle vier Radio-Buttons fest (unabhängig von ihrem Status). Dadurch landen alle Klicks auf einem der Radio-Buttons in dieser Methode.
In der Behandlungsmethode kannst du dann mitChecked
feststellen, welcher der RadioButtons gerade aktiv ist.private: System::Void buttonBerechnen_Click(System::Object^ sender, System::EventArgs^ e) { if (radioButtonAddition->Checked) { //addiere } else if(radioButtonSubtraktion->Checked) { //subtrahiere } ... }