lempy Geschrieben 24. Juli 2013 Teilen Geschrieben 24. Juli 2013 Hallo Leute, ich habe folgendes Problem: Zwei Forms. Form1 = Hauptform, Form2 = einstellungenDialog. Aus der Form1 wird über einem ToolStrip die Form2 aufgerufen um Einstellungen für mein Spielfeld zu machen, die dann in der Form1 übernommen werden sollen. System::Void spielfeldToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) ist die "Schnittstelle" zur Form2. Hier der volle Code der Schnittstelle in der Form1. private: System::Void spielfeldToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) { Point neueGroesse; //Boolean auswahl; einstellungenDialog ^neueWerte = gcnew einstellungenDialog(); //groupBox1->SelectedIndexChanged = gcnew groupBox1(); /*einstellungenDialog ^buttonAuswahl = gcnew einstellungenDialog();*/ /*if (buttonAuswahl->ShowDialog() == Windows::Forms::DialogResult::OK)*/ //auswahl = Focus(); //wenn der Dialog über die "OK"-Schaltlfäche beendet wird if (neueWerte->ShowDialog() == Windows::Forms::DialogResult::OK) { //die neue Größe holen neueGroesse = neueWerte->liefereWert(); //den Dialog wieder schließen neueWerte->Close(); //das Formular ändern this->Width = neueGroesse.X; this->Height = neueGroesse.Y; //neu ausrichten this->Left = (Screen::PrimaryScreen->Bounds.Width - this->Width) / 2; this->Top = (Screen::PrimaryScreen->Bounds.Height - this->Height) / 2; //die Zeichenfläche neu beschaffen zeichenflaeche = spielfeld->CreateGraphics(); //das Spielfeld neu setzen setzeSpielfeld(); //Spielfeld löschen zeichenflaeche->Clear(spielfeld->BackColor); //und einen neuen Ball und einen neuen Schläger zeichnen neuerBall(); } Dabei wird in der Form2 die Methode Point liefereWert() übergeben, dass heißt die Rückgabevariable rückgabe übergiebt die Werte an die Form1. Der vollständige Code aus Form2 mit ein paar Vorversuchen von mir. //die Methode liefert die ausgewählten Werte Point liefereWert() { Point rueckgabe; if (radioButton320->Checked == true) { rueckgabe = Point(320,200); //radioButton320 -> Checked = true; } if (radioButton640->Checked == true) //{ rueckgabe = Point(640,480); //radioButton640 -> Checked = true; //} if (radioButton1024->Checked == true) { rueckgabe = Point(1024,768); //radioButton1024 ->Checked; } if (radioButtonMaximal->Checked == true) { rueckgabe = Point(Screen::PrimaryScreen->Bounds.Width, Screen::PrimaryScreen->Bounds.Height); //radioButtonMaximal -> Checked; } return rueckgabe; } Diese Übergabe funktioniert Problemlos. Meine Frage zu CheckedChanged und Konsorten: Wie kann ich die Ereignisse ChecekedChanged oder Checked der Form2 auf der Form1 abfragen? Geht das überhaupt oder muss ich eine eigene Abfragenmethode entwickeln? Wenn ja muss es dann ein Boll-Wert sein der das Ergebnis zurück gibt? Habe schon soviel gelesen, aber nicht das Richtige gefunden. Selbst in C# Büchern habe ich es nur mit Checked oder ChackedChanged auf nur einer Form gelesen. Ach ja die Radiobutten sind in einer GroupBox. Der radioButton640 ist schon vor Ausgewählt. Genau da liegt dann auch das Problem. Während mein Spielfeld zwar in der ausgewählten Größe startet und ich meine Einstellungen noch mal Ändern möchte, dann ist immer der radioButton640 ausgewählt, obwohl ich z. B. den radioButton320 gewählt hatte. Genau das soll nicht sein. Es soll nicht nur die Größe des Spielfeldes geändert werden, sonder auch der dazugehörige RadioButton ausgewählt sein. (Markiert sein). Wie kann ich das Checked oder CheckedChanged Ereignis aus der Form2 an die Form1 übergeben? Lieben Dank für Eure Hilfen und Anregungen lempy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 24. Juli 2013 Teilen Geschrieben 24. Juli 2013 Für C# - Form2 enthält einen CustomEvent, der ausgelöst wird, wenn Form2 den CheckChangedEvent feuert. - Form2 erhält eine Callback Methode, die beim Instanzieren der Form2 in Form1 mit übergeben wird. - EventAggregator bzw. ein ServiceBus. Denke aber, das dies ein wenig übertrieben wäre :-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lempy Geschrieben 24. Juli 2013 Autor Teilen Geschrieben 24. Juli 2013 Hallo lbm1305 das ganze schreibe ich in c++, darum erlaube mir die Frage ob der "CustomEbent" in den Eigenschaften oder Ereignissen in C# aufgeführt ist oder ob ich das selber machen muss? Mit dem Begriff CustomEvent kann ich absolut nichts anfangen. In C++ ´Forms finde ich diesen Begriff nicht und C# müsste ich mal ausprobieren, ob ich das Programm darin so zum laufen bekommen wie in C++. Versuchsweise halt. Werde mich mal daran setzen und ausprobieren. Mehr Anregungen sind immer noch willkommen. Lieben Dank lempy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lbm1305 Geschrieben 24. Juli 2013 Teilen Geschrieben 24. Juli 2013 (bearbeitet) Ein Custom Event ist nicht anderes als ein selbstgeschriebener Event. Der (Custom)Event muss dort gefeuert werden, wo der bspw. CheckChangedEvent behandelt wird (Handler Methode, wie bspw. beim ButtonClick). Im Grunde genommen verkettest Du die Events. In C# public delegate void MyEventDelegate(object sender, EventArgs e); public partial class Form2 : Form { public event MyEventDelegate CustomEvent; public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (CustomEvent != null) { CustomEvent(this, EventArgs.Empty); } } } Wie die Syntax in C++ ist, musst Du wissen ;-) Auszug aus Form1 private void button1_Click(object sender, EventArgs e) { var form2 = new Form2(); form2.CustomEvent += CustomEventHandler; form2.ShowDialog(); form2.CustomEvent -= CustomEventHandler; } private void CustomEventHandler(object sender, EventArgs e) { Debug.WriteLine("Event, der in Form2 gefeuert wurde."); } EDIT: Stichworte sind hier DELEGATE und EVENTS Bearbeitet 24. Juli 2013 von lbm1305 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
lempy Geschrieben 24. Juli 2013 Autor Teilen Geschrieben 24. Juli 2013 (bearbeitet) Hey Sieht zwar ziemlich kompliziert aus, aber mag wohl eher daran liegen, dass mir die "Fachbegriffe" noch nicht so geläufig sind. Bin im Grunde ja noch Anfänger. Übrigens scheint C# doch etwas anders zu "Ticken" wie c++ (Forms). Also versuchen das Ganze in C++ zu schreiben und später auf C# umsteigen. Verwirrt sonst nur. Wer noch andere Vorschläger hat, immer her damit. Damit ich noch konfuser werde. Lieben Dank lempy PS: Habe eben in einem C++-Buch etwas über "Delegaten" gefunden. Also doch schon ein super Hinweis, denn jetzt weiß ich erstmal in welche Richtung ich im ganz .Net gehen muss. Bearbeitet 24. Juli 2013 von lempy Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.