pong-Spielfeld aus Form1 in Form2 aufrufen



  • Hallo Leute,

    bin immer noch mit meinem Problem beschäftigt. Wird wohl aus der ersten Fragestellung nicht ganz ersichtlich. Darum noch mal neu.

    Ich habe in meinem Pong-Spiel ein ToolStrip eingefüg, indem ich die Einstellungen des Spielfeldes ändern möchte. Unter anderem die Farbe meines Spielfeldes, der Umrandung und der Schrift. Die Größenänderung des Spielfeldes funktioniert, aber ich bekomme die blöde Graphik aus dem Panel in Form1 nicht in das Panel von Form::einstellungenDialog eingebunden. Meine Schnittstelle ist das ToolStip -> Einstellungen. Die Form::einstellungenDialog ist ein neues Form.

    Stellt sich mir die ersten Fragen. Hat das zweite Form jetzt auch von Form1 geerbt? Muss ich die Form1 dort einbinden damit ich auf seine Methoden zugreifen kann, wenn ja wo?

    Der Austausch zwischen den beiden Formen soll über Funktionen und Methoden funktionieren also über der Schnittstelle ToolStrip.

    Habe mal versucht das ganze in C# zu lösen, aber der Code dort ist hier und da doch etwas anders als c++/cli 😕

    Hier noch mal die Code Ausschnitte, die ich aufrufen möchte und über die ich das ganze realisieren möchte:

    Form1

    Void zeichneSpielfeld()
    		{
    			// die weißen Begrenzungen
    
    			pinsel -> Color = Color::White;
    
    			// ein Rechteck oben
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, 0, 0, spielfeldMaxX, spielfeldLinienBreite);
    
    			// ein Rechteck rechts
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, spielfeldMaxX, 0, spielfeldLinienBreite, spielfeldMaxY + spielfeldLinienBreite);
    
    			// und noch eins unter
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, 0, spielfeldMaxY, spielfeldMaxX, spielfeldLinienBreite);
    
    			// damit es nicht langweilig wird, noch eine graue
    			// Linie in die Mitte zeichnen
    
    			pinsel -> Color = Color::Gray;
    
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, spielfeldMaxX / 2, spielfeldMinY, spielfeldLinienBreite,
    				spielfeldMaxY - spielfeldLinienBreite);
    		}
    
    Void neuerBall()
    		{
    			// die Größe des Balls setzen
    
    			ball -> Width = 10;
    			ball -> Height = 10;
    
    			// die Größe des Schlägers setzen
    
    			schlaeger -> Width = spielfeldLinienBreite;
    			schlaeger -> Height = schlaegerGroesse;
    
    			// beide Panels werden weiß
    
    			ball -> BackColor = Color::White;
    
    			schlaeger -> BackColor = Color::White;
    
    			// den Schläger positionieren links an den Rand
    
    			schlaeger -> Left = 2;
    
    			// ungefähr in die Mitte
    			// bitte jeweils in einer Zeile eingeben
    
    			zeichneSchlaeger((spielfeldMaxY / 2) - (schlaegerGroesse / 2));
    
    			// der Ball kommt vor den Schläger ungefähr in die Mitte
    
    			zeichneBall(Point(spielfeldMinX, spielfeldMaxY / 2));
    		}
    
    Void zeichneZeit(String^ restzeit)
    		{
    			// zuerst die alte Anzeige "überschreiben"
    
    			pinsel -> Color = spielfeld -> BackColor;
    
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, spielfeldMaxX - 50, spielfeldMinY + 20, 30, 20);
    
    			// in weißer Schrift
    
    			pinsel -> Color = Color::White;
    
    			// die Attributte für die Schrift werden beim Erstellen des Spielfeldes gesetzt
    
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> DrawString(restzeit, schrift, pinsel, Point(spielfeldMaxX - 50, spielfeldMinY + 20));
    		}
    
    Void zeichnePunkte(String ^punkte)
    		{
    			// zuerst die alte Anzeige "überschreiben"
    
    			pinsel -> Color = spielfeld -> BackColor;
    
    			// bitte in einer Zeile eingeben
    
    			zeichenflaeche -> FillRectangle(pinsel, spielfeldMaxX - 50, spielfeldMinY + 40, 30, 20);
    
    			// in weißer Schrift
    
    			pinsel -> Color = Color::White;
    
    			// die Attribute für die Schrift werden beim Erstellen des Spielfeldes gesetzt
    
    			zeichenflaeche -> DrawString(punkte, schrift, pinsel, Point(spielfeldMaxX - 50, spielfeldMinY + 40));
    		}
    
    private: System::Void spielfeld_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    			 {
    				 zeichneSpielfeld();
    				 zeichneZeit(Convert::ToString(aktuelleSpielzeit));
    			 }
    
    private: System::Void spielfeldToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 Point neueGroesse;
    
    			 // bitte jeweils in einer Zeile eingeben
    
    			 einstellungenDialog ^neueWerte = gcnew einstellungenDialog();
    			 //einstellungenDialog ^neueVorschau = gcnew einstellungenDialog();//Test von mir
    			 //einstellungenDialog -> vorschau(zeichneSpielfeld());
    			 //einstellungenDialog -> ShowDialog();
    
    			 // wenn der Dialog über OK 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
    
    				 // bitte jeweils in einer Zeile eingeben
    
    				 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 Schläger zeichnen
    
    				 neuerBall();
    			 }
    

    Form einstellungenDialog

    #pragma once
    
    namespace pong2 {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    
    	/// <summary>
    	/// Zusammenfassung für einstellungenDialog
    	/// </summary>
    
    	public ref class einstellungenDialog : public System::Windows::Forms::Form
    	{
    
    	public:
    		einstellungenDialog(void)// versuch mit ...(Form^ form) in der Klammer
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    
    		}
    
    	protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    
    		~einstellungenDialog()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    
    	public:
    
    		// die Methode liefert die ausgewählten Werte zurück
    
    		Point liefereWert()
    		{
    			Point rueckgabe;
    
    			if (radioButton320 -> Checked == true)
    
    				rueckgabe = Point(320,200);
    
    			if (radioButton640 -> Checked == true)
    
    				rueckgabe = Point(640,480);
    
    			if (radioButton1024 -> Checked == true)
    
    				rueckgabe = Point(1024,760);
    
    			if (radioButtonMaximal -> Checked == true)
    
    				// bitte in einer Zeile eingeben
    
    				rueckgabe = Point(Screen::PrimaryScreen -> Bounds.Width, Screen::PrimaryScreen -> Bounds.Height);
    
    			return rueckgabe;
    		}
    
    		// meine eingefügte Funktion für Spielfeld in Form1 heist Void Vorschau
    
    		Void vorschau(Graphics ^zflaeche)
    		{
    			// zflaeche;
    		}
    
    	private: System::Windows::Forms::GroupBox^  groupBox1;
    	private: System::Windows::Forms::Button^  buttonUebernehmen;
    	private: System::Windows::Forms::Button^  buttonAbbrechen;
    	private: System::Windows::Forms::RadioButton^  radioButtonMaximal;
    	private: System::Windows::Forms::RadioButton^  radioButton1024;
    	private: System::Windows::Forms::RadioButton^  radioButton640;
    	private: System::Windows::Forms::RadioButton^  radioButton320;
    	private: System::Windows::Forms::GroupBox^  groupBox2;
    	private: System::Windows::Forms::Button^  buttonSpielfeld;
    
    	private: System::Windows::Forms::Button^  buttonRahmen;
    
    	private: System::Windows::Forms::Label^  label2;
    	private: System::Windows::Forms::Label^  label1;
    	private: System::Windows::Forms::Panel^  panelVorschau;
    
    	private: System::Windows::Forms::Label^  label3;
    	private: System::Windows::Forms::ColorDialog^  colorDialog1;
    
    	protected: 
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			this->groupBox1 = (gcnew System::Windows::Forms::GroupBox());
    			this->radioButtonMaximal = (gcnew System::Windows::Forms::RadioButton());
    			this->radioButton1024 = (gcnew System::Windows::Forms::RadioButton());
    			this->radioButton640 = (gcnew System::Windows::Forms::RadioButton());
    			this->radioButton320 = (gcnew System::Windows::Forms::RadioButton());
    			this->buttonUebernehmen = (gcnew System::Windows::Forms::Button());
    			this->buttonAbbrechen = (gcnew System::Windows::Forms::Button());
    			this->groupBox2 = (gcnew System::Windows::Forms::GroupBox());
    			this->buttonSpielfeld = (gcnew System::Windows::Forms::Button());
    			this->buttonRahmen = (gcnew System::Windows::Forms::Button());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->panelVorschau = (gcnew System::Windows::Forms::Panel());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->colorDialog1 = (gcnew System::Windows::Forms::ColorDialog());
    			this->groupBox1->SuspendLayout();
    			this->groupBox2->SuspendLayout();
    			this->SuspendLayout();
    			// 
    			// groupBox1
    			// 
    			this->groupBox1->Controls->Add(this->radioButtonMaximal);
    			this->groupBox1->Controls->Add(this->radioButton1024);
    			this->groupBox1->Controls->Add(this->radioButton640);
    			this->groupBox1->Controls->Add(this->radioButton320);
    			this->groupBox1->Location = System::Drawing::Point(12, 12);
    			this->groupBox1->Name = L"groupBox1";
    			this->groupBox1->Size = System::Drawing::Size(323, 80);
    			this->groupBox1->TabIndex = 0;
    			this->groupBox1->TabStop = false;
    			this->groupBox1->Text = L"Größe";
    			// 
    			// radioButtonMaximal
    			// 
    			this->radioButtonMaximal->AutoSize = true;
    			this->radioButtonMaximal->Location = System::Drawing::Point(253, 32);
    			this->radioButtonMaximal->Name = L"radioButtonMaximal";
    			this->radioButtonMaximal->Size = System::Drawing::Size(63, 17);
    			this->radioButtonMaximal->TabIndex = 3;
    			this->radioButtonMaximal->TabStop = true;
    			this->radioButtonMaximal->Text = L"Maximal";
    			this->radioButtonMaximal->UseVisualStyleBackColor = true;
    			// 
    			// radioButton1024
    			// 
    			this->radioButton1024->AutoSize = true;
    			this->radioButton1024->Location = System::Drawing::Point(170, 32);
    			this->radioButton1024->Name = L"radioButton1024";
    			this->radioButton1024->Size = System::Drawing::Size(77, 17);
    			this->radioButton1024->TabIndex = 2;
    			this->radioButton1024->Text = L"1024 * 768";
    			this->radioButton1024->UseVisualStyleBackColor = true;
    			// 
    			// radioButton640
    			// 
    			this->radioButton640->AutoSize = true;
    			this->radioButton640->Checked = true;
    			this->radioButton640->Location = System::Drawing::Point(93, 32);
    			this->radioButton640->Name = L"radioButton640";
    			this->radioButton640->Size = System::Drawing::Size(71, 17);
    			this->radioButton640->TabIndex = 1;
    			this->radioButton640->TabStop = true;
    			this->radioButton640->Text = L"640 * 480";
    			this->radioButton640->UseVisualStyleBackColor = true;
    			// 
    			// radioButton320
    			// 
    			this->radioButton320->AutoSize = true;
    			this->radioButton320->Location = System::Drawing::Point(16, 32);
    			this->radioButton320->Name = L"radioButton320";
    			this->radioButton320->Size = System::Drawing::Size(71, 17);
    			this->radioButton320->TabIndex = 0;
    			this->radioButton320->Text = L"320 * 200";
    			this->radioButton320->UseVisualStyleBackColor = true;
    			// 
    			// buttonUebernehmen
    			// 
    			this->buttonUebernehmen->DialogResult = System::Windows::Forms::DialogResult::OK;
    			this->buttonUebernehmen->Location = System::Drawing::Point(15, 354);
    			this->buttonUebernehmen->Name = L"buttonUebernehmen";
    			this->buttonUebernehmen->Size = System::Drawing::Size(75, 23);
    			this->buttonUebernehmen->TabIndex = 1;
    			this->buttonUebernehmen->Text = L"Übernehmen";
    			this->buttonUebernehmen->UseVisualStyleBackColor = true;
    			// 
    			// buttonAbbrechen
    			// 
    			this->buttonAbbrechen->Location = System::Drawing::Point(266, 354);
    			this->buttonAbbrechen->Name = L"buttonAbbrechen";
    			this->buttonAbbrechen->Size = System::Drawing::Size(75, 23);
    			this->buttonAbbrechen->TabIndex = 2;
    			this->buttonAbbrechen->Text = L"Abbrechen";
    			this->buttonAbbrechen->UseVisualStyleBackColor = true;
    			this->buttonAbbrechen->Click += gcnew System::EventHandler(this, &einstellungenDialog::buttonAbbrechen_Click);
    			// 
    			// groupBox2
    			// 
    			this->groupBox2->Controls->Add(this->buttonSpielfeld);
    			this->groupBox2->Controls->Add(this->buttonRahmen);
    			this->groupBox2->Controls->Add(this->label2);
    			this->groupBox2->Controls->Add(this->label1);
    			this->groupBox2->Location = System::Drawing::Point(12, 98);
    			this->groupBox2->Name = L"groupBox2";
    			this->groupBox2->Size = System::Drawing::Size(323, 100);
    			this->groupBox2->TabIndex = 3;
    			this->groupBox2->TabStop = false;
    			this->groupBox2->Text = L"Farben";
    			// 
    			// buttonSpielfeld
    			// 
    			this->buttonSpielfeld->Location = System::Drawing::Point(77, 50);
    			this->buttonSpielfeld->Name = L"buttonSpielfeld";
    			this->buttonSpielfeld->Size = System::Drawing::Size(30, 30);
    			this->buttonSpielfeld->TabIndex = 3;
    			this->buttonSpielfeld->Text = L". . .";
    			this->buttonSpielfeld->UseVisualStyleBackColor = true;
    			this->buttonSpielfeld->Click += gcnew System::EventHandler(this, &einstellungenDialog::buttonSpielfeld_Click);
    			// 
    			// buttonRahmen
    			// 
    			this->buttonRahmen->Location = System::Drawing::Point(77, 14);
    			this->buttonRahmen->Name = L"buttonRahmen";
    			this->buttonRahmen->Size = System::Drawing::Size(30, 30);
    			this->buttonRahmen->TabIndex = 2;
    			this->buttonRahmen->Text = L". . .";
    			this->buttonRahmen->UseVisualStyleBackColor = true;
    			this->buttonRahmen->Click += gcnew System::EventHandler(this, &einstellungenDialog::buttonRahmen_Click);
    			// 
    			// label2
    			// 
    			this->label2->AutoSize = true;
    			this->label2->Location = System::Drawing::Point(13, 67);
    			this->label2->Name = L"label2";
    			this->label2->Size = System::Drawing::Size(50, 13);
    			this->label2->TabIndex = 1;
    			this->label2->Text = L"Spielfeld:";
    			// 
    			// label1
    			// 
    			this->label1->AutoSize = true;
    			this->label1->Location = System::Drawing::Point(13, 31);
    			this->label1->Name = L"label1";
    			this->label1->Size = System::Drawing::Size(50, 13);
    			this->label1->TabIndex = 0;
    			this->label1->Text = L"Rahmen:";
    			// 
    			// panelVorschau
    			// 
    			this->panelVorschau->BackColor = System::Drawing::Color::FromArgb(static_cast<System::Int32>(static_cast<System::Byte>(224)), static_cast<System::Int32>(static_cast<System::Byte>(224)), 
    				static_cast<System::Int32>(static_cast<System::Byte>(224)));
    			this->panelVorschau->BorderStyle = System::Windows::Forms::BorderStyle::FixedSingle;
    			this->panelVorschau->Location = System::Drawing::Point(12, 234);
    			this->panelVorschau->Name = L"panelVorschau";
    			this->panelVorschau->Size = System::Drawing::Size(323, 100);
    			this->panelVorschau->TabIndex = 4;
    			this->panelVorschau->Paint += gcnew System::Windows::Forms::PaintEventHandler(this, &einstellungenDialog::panelVorschau_Paint);
    			// 
    			// label3
    			// 
    			this->label3->AutoSize = true;
    			this->label3->Location = System::Drawing::Point(12, 218);
    			this->label3->Name = L"label3";
    			this->label3->Size = System::Drawing::Size(52, 13);
    			this->label3->TabIndex = 5;
    			this->label3->Text = L"Vorschau";
    			// 
    			// einstellungenDialog
    			// 
    			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
    			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
    			this->ClientSize = System::Drawing::Size(353, 400);
    			this->Controls->Add(this->label3);
    			this->Controls->Add(this->panelVorschau);
    			this->Controls->Add(this->groupBox2);
    			this->Controls->Add(this->buttonAbbrechen);
    			this->Controls->Add(this->buttonUebernehmen);
    			this->Controls->Add(this->groupBox1);
    			this->Name = L"einstellungenDialog";
    			this->StartPosition = System::Windows::Forms::FormStartPosition::CenterParent;
    			this->Text = L"Einstellungen";
    			this->TopMost = true;
    			this->groupBox1->ResumeLayout(false);
    			this->groupBox1->PerformLayout();
    			this->groupBox2->ResumeLayout(false);
    			this->groupBox2->PerformLayout();
    			this->ResumeLayout(false);
    			this->PerformLayout();
    
    		}
    #pragma endregion
    	private: System::Void buttonAbbrechen_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 Close();
    			 }
    	private: System::Void buttonRahmen_Click(System::Object^  sender, System::EventArgs^  e) 
    			 {
    				 // den Dialog zur Farbauswahl anzeigen
    				 // bitte jeweils in einer Zeile eingeben
    
    				 if (colorDialog1 -> ShowDialog() == Windows::Forms::DialogResult::OK)
    				 {
    					 // Farbe für die Begrunzungsbalken setzen
    				 }
    			 }
    private: System::Void buttonSpielfeld_Click(System::Object^  sender, System::EventArgs^  e) 
    		 {
    			 if (colorDialog1 -> ShowDialog() == Windows::Forms::DialogResult::OK)
    			 {
    				//Point hintergrundfarbe;
    
    				 panelVorschau -> BackColor = colorDialog1 -> Color;
    
    				 //return;
    			 }
    		 }
    private: System::Void panelVorschau_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) 
    		 {
    
    			/*pong2::Form1() -> zeichneSpielfeld ^kopieSpielfeld = gcnew zeichneSpielfeld();*/
    		 }
    };
    }
    

    Die zweite Form habe ich komplett kopiert. Sind sicherlich noch ein paar Gehversuche vorhanden.

    Wenn ich mich nicht schnell melde, liegt es an den Prüfungsvorbereitungen für meine Umschulung. Stichtag 21.06.2013.

    Bin für jeden Hinweis und jede Hilfe dankbar.

    Lieber Guß

    champman



  • 1


Anmelden zum Antworten