Probleme mit ButtonArray

realjoda

Grünschnabel
Hallo zusammen,

ich bin momentan dabei Schiffeversenken in C# zu programmieren, dass Programm läuft soweit, dass die 2 Spieler schon auf das Feld des Gegners schießen können und auch überprüft wird ob er was getroffen hat oder nicht und da liegt das Problem. Wenn der Spieler ein Button klickt in dem ein Schiff gespeichert ist, bekommt der Button das richtige Bild und alles ist perfekt. Trifft er aber in ein Feld, dass keinen Wert halt, sprich Wasser, dann dauert es ca. 7-8 sekunden in denen er die Buttons glaube ich gegen meinen Willen aktualisiert was bei insgesamt 200 Buttons eben etwas dauert, danach zeigt er auch die richtige Grafik an und es geht weiter.

Das 2te kleinere Problem besteht darin, dass sich die Buttons auf der GUI nach einander recht schnell aufbauen was aber nicht schön aussieht und auch wenn ich das Fenster minimiere und dann wieder öffne erstellt er die Buttons neu.

Kann mir jemand sagen was ich dagegen tun kann? Bei Bedarf stelle ich auch gern den entsprechenden Teil des Quellcodes zur Verfügung.

Vielen Dank,
Jonas
 
Zuletzt bearbeitet:
Ja, Sourcecode für die relevanten Stellen wäre nicht schlecht. Kann man sich so doch schlecht vorstellen.

Zudem stellt sich für mich die Frage, ob hier Buttons wirklich die richtige Wahl sind ...
 
Danke für die schnelle Antwort.
Das erste Problem hat konnte ich gestern noch beheben :)

Was würdest du mir denn Empfehlen Norbert?
 
Arbeite mit PictureBoxen oder erstelle dir dein eigenes UserControl, das bestimmte Parts selbst übernehmen kann.
 
@niggo
Die Buttons bring ich so auf die Oberfläche:

Code:
for (int i = 0; i < dim; i++)
     {
        for (int j = 0; j < dim; j++)
             {
                array[i, j] = new Button();
                array[i, j].SetBounds((i + boundI) * (btXSize + blankSize),
                                         (j + boundJ) * (btYSize + blankSize),
                                         btXSize, btYSize);
                array[i, j].FlatStyle = FlatStyle.Popup;
                array[i, j].ForeColor = Color.Firebrick;
                string bild = ".\\bilder\\karte\\wasser.jpg";
                array[i, j].BackgroundImage = Image.FromFile(bild);
                this.pnlArray.Controls.Add(array[i, j]);
                array[i, j].Tag = i + "/" + j + "/" + "NULL";

                array[i, j].Click += new EventHandler(Buttons_Click);
                array[i, j].MouseEnter += new EventHandler(Buttons_MouseEnter);
                array[i, j].MouseLeave += new EventHandler(Buttons_MouseLeave);
              }
        }

@Norbert
Entsteht bei PictureBoxen nicht das problem, dass man sieht wie sie sich aufbauen?
 
Hi,

ok, das dacht ich schon fast ;)
sorry war faslch ausgedrückt von mir. Ich stell meine Frage mal anders:
Wo bringst du die Buttons auf die Form?

Eventuell bringt davor bzw. danach der Aufruf von Suspend- / ResumeLayout etwas.
Ggf. könnte dir auch Funktion LockWindowUpdate (Windows-Api, user32.dll) weiterhelfen.
 
Was meinste denn mit wo:confused:

Ich denk mal wenn man die das ständige Repaint unterdrückt ist zumindest der Fehler behoben, dass alles immer neu gezeichnet wird wenn ich das Fenster minimier und anschließen maximier oder?

@Norbert
Ich hab die PictureBoxen mal getestet und is der selbe effekt :(
Mit UserControls kenn ich mich leider nicht gut genug aus um sie zu testen...
 
Was meinste denn mit wo:confused:

Ich denk mal wenn man die das ständige Repaint unterdrückt ist zumindest der Fehler behoben, dass alles immer neu gezeichnet wird wenn ich das Fenster minimier und anschließen maximier oder?

Mit wo meine ich: im Konstruktor? im onload-Event? im OnPaint-Event? jedesmal wenn irgendwas passiert?....
 
Nach dem sich die 2 Spieler angemeldet haben ruf ich eine Methode auf die "Buttonsgenerieren" heißt.

Jetzt hab ich schon wieder ein neues Problem...:mad:
Jeder Spieler besitzt ein Array in dem gespeichert ist wo er seine Schiffe gesetzt hat (ArrayS1, ArrayS2). Wenn ich jetzt bspw. in ArrayS1etwas am Tag ändere würd das für ArrayS2 übernommen und ich hab keine Ahnung warum er das macht:confused:
 
Zurück