Zum Inhalt springen

CheckedChanged und Changed auf zweiter Form


lempy

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von lbm1305
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von lempy
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...