Brauche Einstiegshilfe nach Prüfung



  • Hallo Leute

    ich mal wieder. Habe meine Prüfung endlich hinter mir und möchte meine letzten Hefte (3) durcharbeiten. Windows Forms mit "C++". Was dazu zu sagen ist, ist mir bekannt, aber die letzten Hefte sollten schon abgearbeitet werden.

    Frage

    Ich habe zwei Forms. In Form2 habe ich vier Radiobutten, mit denen ich meine Spielfeldgröße einstellen kann. Die Schnittstelle zur Form2 ist ein Toolstrip in Form1.

    Mit meinem Code wird zwar die Spielfeldgröße übernommen, aber wenn ich dann im Menü noch mal das Toolstrip "Spielfeld" aufrufe, dann ist noch immer die vordefinierte Größe markiert z. B. 640 * 640.

    Ich möchte erreichen, dass meine geänderte Auswahl auch auch angezeigt wird, wenn ich während des Spiels das Menüfeld "Spielfeld" öffne. Also anstatt 640 * 640 eben die neu ausgewählten 2024 * 640.

    Hier die beiden Codeschnipzel

    Methode aus Form2

    public:
    
    	//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;
    
    		}
    

    Der Code des Toolstrips in Form1

    private: System::Void spielfeldToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
    
    			Point neueGroesse;
    
    			einstellungenDialog ^neueWerte = gcnew einstellungenDialog();
    
    			//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();
    			}
    

    Irgendwie müsste hier in diesem Toolstrip auch die Auswahlabfrage der Radiobutten auftauchen, aber ich habe im Moment keine Ahnung wie ich das machen soll. Micht Checked Changed und einer Returnanweisung habe ich versucht, aber das ist fehlgeschlagen.

    Wie schon erwähnt, die Auswahl so wird angenommen. Die Größe des Feldes wird geändert es geht nur um die Auswahl der Radiobutten. Alles was ich bisher gefunden habe darüber, waren Rodio- oder auch Auswhalbutten auf der Form1, aber mir kommt der Verdacht, dass das was vorhabe etwas anders funktioniert als die Abfragen auf nur einer Form. Die Frage ist nur wie?

    Lieben Dank für Eure Hilfe

    champmann

    PS. Wäre schade wenn ich die letzten drei Hefte nicht durcharbeite. Bin eh schon zu lange dabei um jetzt auf zu geben.



  • Hallo,

    entweder du erzeugst den "einstellungenDialog" nur einmalig (und nicht immer wieder neu im spielfeldToolStripMenuItem_Click) oder aber du erzeugst analog zu "liefereWert" eine "setzeWert"-Methode und rufst diese dann auf (wobei deine Namensgebung verbesserungsbedürftig ist ;-).

    P.S. Und deine Zeichenlogik scheint auch nicht korrekt zu sein (CreateGraphics sollte man nicht verwenden, sondern nur im Paint-Ereignis zeichnen, s. z.B. [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox)).



  • Hallo Th96

    Mein Problem liegt eher darin, dass ich vergeblich versuche den z. B, den RadioButton320 in meiner Form2 (Name: einstellungenDialog) ausgewählt zu erhalten.

    Über das ToolStrip rufe ich meine Dialogeinstellungen auf, die ich einer zweiten Form habe. Standardmäßig ist mein RadioButton640 ausgewählt. Wenn ich dann aber den RadioButton320 auswähle, dann läuft das Spiel zwar in dieser Größe, aber wenn ich dann nochmal sehen möchte welcher RadioButton jetzt "makiert" ist, dann ist immer noch RadioButton640 makiert anstatt der RadioButton320. Mit nur einer Form funktioniert die Abfrage hervorragend mit Checked oder CheckedChanged, doch wie bekomme ich diese Auswertung in der Form2 (einstellungenDialog) so in die Form1 rüber, das auch wirklich nach der Auswahl RadioButton320 markiert bleibt.

    Ich denke das müsste eine Booleanmethode sein, aber welche von den vielen, die ich noch nicht ergründet habe. Denn die Methode muss ja checked = true in eine Variable der Form1 weiter geben mit der ich dann den gewählten RadioButton als markiert setzen kann.

    Oder aber vielleicht doch ein Clickereignis? Eine Abfrage der GroupBox? Wenn ja wie würde die für die für eine GroupBox aussehen? Müsste mit Index arbeiten, aber alles was ich bisher gefunden habe hat sich mit TextBox, ListBox und anderen Boxen beschäftigt. Das für RadioButten in einer GroupBox um zu setzen habe ich noch nicht geschafft und wird für einen Anfänger wie mich wohl noch ein paar Stunden, wenn nicht Tage dauern.

    Trotzdem bin ich für jeden Hinweis dankbar. Vielleicht habe ich ja auch nur Scheuklappen vor den Augen und sehe den richtigen Ansatz deshalb nicht.

    Lieber Gruß

    champman



  • kannst du gerne bekommen.

    Falls du noch nicht drauf gekommen bist, weiter lesen. Falls doch, ignorier den Text.

    Lehn dich mal entspannt bei ner Tasse Kaffee/Tee (Egal was. Hauptsache es betäubt nicht :p ) zurück und überleg mal.

    So wie ich das sehe liefert die Methode liefereWert lediglich der Methode spielfeldToolStripMenuItem_Click die neuen Werte für Height und Width der Form1.
    Nicht mehr, nicht weniger.
    Das Dialogfenster Einstellungen erhält doch gar keine Werte. Woher soll also der Dialog wissen welcher RadioButton den Wert checked = true erhalten soll?

    Also brauchst du eine Methode die dem Dialogfenster vorher die aktuellen Werte der Form1 übergibt. Da Width immer einen anderen Wert hat reicht es, das nur Width übergeben wird. Die Methode die die aktuellen Werte erhält bastelst du in deine 2te Form, da wo auch die Methode liefereWert drin ist. Der Aufruf der Methode erfolgt in der spielfeldToolStripMenuItem_Click, sinniger Weise nach Vereinbarung des Dialoges, aber vor erscheinen des selbigen 😉

    Hoffe ich konnte helfen.
    Wenn ich erfolgreich zur Verwirrung beigetragen habe, dann melden. 🤡



  • Hallo Juppes!

    Das Thema hat sich mit der Weile erledigt, aber genau einen solchen Anstoß hätte ich vorher schon gebraucht um auf den richtigen Gedanken zu kommen.

    Aber wie gesagt mit Hilfe habe ich es dann doch noch geknackt.

    Dabei habe ich jetzt ein anderes Problem! Farbeinstellungen von meinem Dialog auf der From1 übernehmen.

    Dazu habe ich einen ColordDialog den ich jeweils mit einem Button öffne.
    Button1 soll die Farbe für den Rahmen an die Form1 übergeben und Button2 die Hintergrundfarbe des Panel auf der From1.

    Im Form2 (Dialog) habe ich auch ein Panel als Vorschau.

    Vielleicht kannst Du mir ja dafür auch noch einen guten Denkanstoß geben.

    Meine Gedanke ist, auch dieses im Konstruktor der Form2 (Dialog) zu schreiben, bin mir aber noch nicht ganz sicher und weiß auch noch nicht wie.

    Also schon mal lieben Dank für Deine Hilfe

    champmann


Log in to reply