Problem beim Übergeben einer Farbe zwischen 2 Formularen



  • Hallo,

    ich bin neu hier und habe auch gleich eine Frage.
    Ich entschuldige mich vorab für irgendwelche Fehler, ich muss mich erst etwas eingewöhnen.
    Ich habe ein Pong-Spiel, bei dem ich die Spielfeldfarbe und die Rahmenfarbe jeweils an ein 2. Formular übergeben muss.
    Einmal vom Spielfeld an ein Vorschauspielfeld und von diesem wieder ans Spielfeld.
    Die Spielfeldfarbe funktioniert, aber die Rahmenfarbe ist etwas fummeliger.
    Hier ein Auszug aus Form1, in der die Anweisungen zum Übergeben der Farbe stehen:

    private: System::Void spielfeldToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    			 Point neueGroesse;
    			 //EINSENDEAUFGABE 3 CPBS 14B
    			 Color SpielfeldFarbeHolen; //Neuer Wert zum Holen der Spielfeldfarbe
    			 //EINSENDEAUFGABE 3 CPBS 14B
    			 Color RahmenFarbeHolen; //Neuer Wert zum Holen der Rahmenfarbe
    			 einstellungenDialog ^neueWerte = gcnew einstellungenDialog();
    			 //EINSENDEAUFGABE 3 CPBS 14B
    			 //Aufruf der erstellten Methode im einstellungenDialog (Spielfeldfarbe)
    			 neueWerte->SpielfeldFarbeUebernehmen(spielfeld->BackColor);
    			 //EINSENDEAUFGABE 3 CPBS 14B
    			 //Aufruf der erstellten Methode im einstellungenDialog (Rahmenfarbe)
    			 neueWerte->RahmenFarbeUebernehmen();
    			 //wenn der Dialog über die "OK"-Schaltlfäche beendet wird
    			 if (neueWerte->ShowDialog() == ::DialogResult::OK) {
    				 //die neue Größe holen
    				 neueGroesse = neueWerte->liefereWert();
    				 //EINSENDEAUFGABE 3 CPBS 14B
    				 //die neue Spielfeldfarbe holen und setzen
    				 SpielfeldFarbeHolen = neueWerte->SendeSpielfeldFarbe();
    				 spielfeld->BackColor = SpielfeldFarbeHolen;
    				 //EINSENDEAUFGABE 3 CPBS 14B
    				 //die neue Rahmenfarbe holen und setzen
    				 RahmenFarbeHolen = neueWerte->SendeRahmenFarbe();
    				  = RahmenFarbeHolen;
    				 //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();
    			 }
    		 }
    

    Und hier Form2 (einstellungenDialog):

    public ref class einstellungenDialog : public System::Windows::Forms::Form
    	{
    
    	public:
    
    		//EINSENDEAUFGABE 3 CPBS 14B
    		//Methode zum Übergeben der Spielfeldfarbe vom Spielfeld an die Vorschau
    		Color SpielfeldFarbeUebernehmen(Color farbe1) {
    			panelSpielfeldVorschau->BackColor = farbe1;
    			return farbe1;
    		}
    
    		//EINSENDEAUFGABE 3 CPBS 14B
    		//Methode zum Übergeben der Rahmenfarbe vom Spielfeld an die Vorschau
    		Color RahmenFarbeUebernehmen(Color farbe2) {
    			panelRahmenVorschau->BackColor = farbe2;
    			return farbe2;
    		}
    
    //EINSENDEAUFGABE 3 CPBS 14B
    		//die Methode liefert die Spielfeldfarbe der Vorschau an das echte Spielfeld
    		Color SendeSpielfeldFarbe() {
    			return panelSpielfeldVorschau->BackColor;
    			}
    
    		//EINSENDEAUFGABE 3 CPBS 14B
    		//die Methode liefert die Rahmenfarbe der Vorschau an das echte Spielfeld
    		Color SendeRahmenFarbe() {
    			return panelRahmenVorschau->BackColor;
    			}
    

    Ich weiß, das ich in dieser Methode

    //zum Zeichnen des Spielfeldes
    	Void zeichneSpielfeld() {
    		//die weißen Begrenzungen
    		pinsel->Color = Color::White;
    		//ein Rechteck oben
    		zeichenflaeche->FillRectangle(pinsel, 0, 0, spielfeldMaxX, spielfeldLinienbreite);
    		//ein Rechteck rechts
    		zeichenflaeche->FillRectangle(pinsel, spielfeldMaxX, 0, spielfeldLinienbreite, spielfeldMaxY + spielfeldLinienbreite);
    		//und noch eins unten
    		zeichenflaeche->FillRectangle(pinsel, 0, spielfeldMaxY, spielfeldMaxX, spielfeldLinienbreite);
    		//damit es nicht langweilig wird, noch eine graue Linie in die Mitte
    		pinsel->Color = Color::Gray;
    		zeichenflaeche->FillRectangle(pinsel, spielfeldMaxX / 2, spielfeldMinY, spielfeldLinienbreite, spielfeldMaxY - spielfeldLinienbreite);
    	}
    

    etwas ändern muss bzw. ein neues Attribut anlegen muss.
    Aber ich weiß nicht so recht, wie.
    Ich weiß nicht, ob der Quelltext ausreicht, um mein Problem zu verstehen.
    Hoffentlich kann mir jemand weiterhelfen.

    Danke und Gruß
    Proggimaster



  • Ist hier niemand, der mir helfen kann?
    So viele Zugriffe, aber keiner sagt etwas dazu? 😞


Anmelden zum Antworten