Projekt mit RadioButtons funktioniert nicht
-
Hallo,
ich verzweifle an einem kleinen Programm.
Es handelt sich um eine Anwendung mit 2 GroupBoxes, in denen jeweils 3 RadioButtons enthalten sind.public partial class Form1 : Form { public Form1() { InitializeComponent(); } string AusgabeUrlaubsort = "Berlin"; string AusgabeUnterkunft = "Pension"; private void optUrlaubsort_CheckedChanged(object sender, EventArgs e) { // Urlaubsort if (optBerlin.Checked) AusgabeUrlaubsort = "Berlin"; else if (optParis.Checked) AusgabeUrlaubsort = "Paris"; else AusgabeUrlaubsort = "Rom"; lblAnzeige.Text = AusgabeUrlaubsort + ", " + AusgabeUnterkunft; } private void optUnterkunft_CheckedChanged(object sender, EventArgs e) { // Unterkunft if (optAppartement.Checked) AusgabeUnterkunft = "Appartement"; else if (optPension.Checked) AusgabeUnterkunft = "Pension"; else AusgabeUnterkunft = "Hotel"; lblAnzeige.Text = AusgabeUrlaubsort + ", " + AusgabeUnterkunft; } }
Das ist der ganze Code in der Form1.cs. Es ist ein Projekt aus dem Buch von Theis "C#".
Das Programm wird ohne Fehlermeldungen kompiliert, das Formular erscheint, aber wenn man die Radiobuttons anklickt, erscheint nicht der gewünschte Text, z. B.
"Berlin, Hotel".
Ich habe hier die Musterlösung von Theis verwendet, trotzdem geht es nicht.
Woran könnte es liegen?
Vielen Dank im Voraus!
-
Was ist "optUrlaubsort" für ein Element?
Bist Du mal mit dem Debugger durchgegangenen?
Ich vermute mal "optUrlaubsort_CheckedChanged(object sender, EventArgs e)" wird nicht ausgelöst.
-
optUrlaubsort ist eine GroupBox.
Beim Debuggen kommt man bis zu dem Punkt, wo das Formular erscheint. Wenn man dann die RadioButtons anklickt, passiert nichts.
-
Eine GroupBox hat doch gar kein CheckedChanged-Ereignis, daher kann es so nicht funktionieren - du mußt das CheckedChanged-Ereignis für jeden RadioButton einzeln abonnieren (du kannst aber dafür jeweils die gleiche Ereignismethode verwenden).
Hast du den Code (d.h. das Projekt) von Hand erstellt, oder war bei dem Buch ein Vorlagenprojekt dabei?
-
chicken25 schrieb:
optUrlaubsort ist eine GroupBox.
Beim Debuggen kommt man bis zu dem Punkt, wo das Formular erscheint. Wenn man dann die RadioButtons anklickt, passiert nichts.
Doch! Die Checked-Eigenschaften der RadioButtons werden auf true/false gesetzt. Nur, ohne passend eingerichtete
Ereignismethoden siehst du diese einfach nicht. Du kannst die Abfrage auch mit einem Button ausserhalb der
Groupboxes z.B. in der Methode button1_Click oder sonstwo durchführen.
-
Ich habe ein Projekt erstellt, das Formular gezeichnet und dann die CheckedChanged Methode aus der Musterlösung kopiert.
-
Du solltest das so machen wie Th69 sagt, das CheckedChanged-Ereignis für jeden RadioButton einzeln abonnieren...
-
Du hast die Hinweise alle nicht verstanden. Du hast zwar Ereignis-Methoden kopiert, doch fehlt offensichtlich deren
Anmeldung bei den einzelnen RadioButtons. Diese machst du im Formularentwurf mit einem rechten Mausklick auf
die RadioButtons und dann mit einem Klick auf die Ereignisliste. Hier fügst du die Anmeldung unter CheckedChanged ein.Mach dich mit den Begriffen Eigenschaften und Ereignisse sowie mit der IDE von VisualStudio zur Festlegung derselben vertraut.
Nur Code kopieren reicht nicht!
-
Ich danke allen, die mir Hinweise gegeben haben.
So gehts:public partial class Form1 : Form { public Form1() { InitializeComponent(); } string AusgabeUrlaubsort = "Berlin"; string AusgabeUnterkunft = "Pension"; private void optBerlin_CheckedChanged(object sender, EventArgs e) { if (optBerlin.Checked) AusgabeUrlaubsort = "Berlin"; Anzeigen(); } private void optParis_CheckedChanged(object sender, EventArgs e) { if (optParis.Checked) AusgabeUrlaubsort = "Paris"; Anzeigen(); } private void optRom_CheckedChanged(object sender, EventArgs e) { if (optRom.Checked) AusgabeUrlaubsort = "Rom"; Anzeigen(); } private void optAppartement_CheckedChanged(object sender, EventArgs e) { if (optAppartement.Checked) AusgabeUnterkunft = "Appartement"; Anzeigen(); } private void optPension_CheckedChanged(object sender, EventArgs e) { if (optPension.Checked) AusgabeUnterkunft = "Pension"; Anzeigen(); } private void optHotel_CheckedChanged(object sender, EventArgs e) { if (optHotel.Checked) AusgabeUnterkunft = "Hotel"; Anzeigen(); } private void Anzeigen() { lblAnzeige.Text = AusgabeUrlaubsort + ", " + AusgabeUnterkunft; }
Da hat der Kollege Theis in seinem Buch wohl irgendwie einen Fehler gemacht
-
Oder du hast es nicht verstanden...
Du hättest, wie ich schon schrieb und wie es wohl der Autor auch gemacht hat, auch immer die gleiche Ereignismethode abonnieren können:
- optUrlaubsort_CheckedChanged für optBerlin, optParis, optRom
- optUnterkunft_CheckedChanged für optAppartement, optPension, optHotelEinzig die Namensgebung finde ich nicht so toll - besser wären wohl die Namen 'Urlaubsort_CheckedChanged' und 'Unterkunft_CheckedChanged' (bzw. am besten gleich alles auf englisch ;-).
-
Asche auf mein Haupt. Ich habe den Code in dem Buch von Theis völlig missverstanden. Vielen Dank.