Autor Beitrag
adiemus84
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 25.12.10 16:54 
Hallo,

ich möchte zur Laufzeit gekoppelt mit einem numericUpDown Feld Bilder in eine Form laden und wieder entfernen, je nachdem welchen Wert die Variable hat. Das hinzufügen klappt soweit. Nur beim Entfernen, also wenn der Wert erniedrigt wird, hab ich meine Probleme.

Mein Ansatz sieht folgendermasen aus:
Bei Änderung der Variablen wird die Methode aufgerufen, alle PictureBoxen gelöscht und eine neue Anzahl wieder erzeugt.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
PictureBox[] pct = new PictureBox[6];
               
        void Start(int Anzahl)
        {
                int position_y = 298;
                for (int i = 0; i < 6; i++)
                {
                    if () //Hier würde ich gerne überprüfen, ob das entsprechende Control vorhanden ist, wenn ja löschen
                    {     //bzw. überprüfen ob im Feld eine PictureBox erzeugt wurde
                        pct[i].Dispose();
                    }
                }

                    for (int y = 0; y < 6; y++)
                    {
                        pct[y] = new PictureBox();
                        pct[y].Location = new Point(12, position_y);
                        pct[y].Size = new Size(188,24);
                        pct[y].Image = new Bitmap(bild[y]);
                        Controls.Add(pct[y]);
                        pct[y].BringToFront();
                        position_y = position_y-30;    
                     }
        }
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 25.12.10 17:37 
Hallo und :welcome: in der Entwickler-Ecke, user profile iconadiemus84!

user profile iconadiemus84 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden C#-Quelltext
 
8:
9:
10:
11:
/* ... */
                    if () //Hier würde ich gerne überprüfen, ob das entsprechende Control vorhanden ist, wenn ja löschen
                    {     //bzw. überprüfen ob im Feld eine PictureBox erzeugt wurde
                        pct[i].Dispose();
                    }

Was willst du denn dort überprüfen? Laut deinem Ansatz sollen doch alle PictureBox-Komponenten entfernt werden, und zwar ausnahmslos. Dann ist doch gar keine Bedingung notwendig.

Und wo im Quelltext steht denn die Variable, deren Wert der Benutzer festlegt?

Grüße und schöne Weihnachten,
Yogu
adiemus84 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 25.12.10 18:01 
Erstmal ein großes Dankeschön für die nette Begrüßung.

user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:

Was willst du denn dort überprüfen? Laut deinem Ansatz sollen doch alle PictureBox-Komponenten entfernt werden, und zwar ausnahmslos. Dann ist doch gar keine Bedingung notwendig.

Alle PictureBoxen sollen nicht entfernt werden, nur die, die im Array sind. Gibt es da etwa eine einfache möglichkeit, die ich noch nicht gefunden habe?

Das Problem ist, das beim ersten Aufruf der Methode im Array ja noch keine Elemente vorhanden sind, wenn ich nun eine Schleife über das Array laufen lasse und mittels Dispose die Boxen entferne stürzt das Programm ab.


user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:

Und wo im Quelltext steht denn die Variable, deren Wert der Benutzer festlegt?

Dazu rufe ich in der Ereignismethode eines NumericUpDown Feldes die oben angegebene Methode auf. Als Wert wird der Wert des NumericUpDown Feldes übergeben.
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 25.12.10 19:13 
wenn ich das richtig verstanden habe dann willst du quasi eine picBox aus dem Array schmeißen?

Falls das gemeint war. Was würe dagegen sprechen, die lösch-ogig außerhalb der Schleife zu machen?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
PictureBox[] pct = new PictureBox[6];
               
        void Start(int Anzahl)
        {
                int position_y = 298;
                for (int i = 0; i < 6; i++)
                {
                    //if () //Hier würde ich gerne überprüfen, ob das entsprechende Control vorhanden ist, wenn ja löschen
                    //{     //bzw. überprüfen ob im Feld eine PictureBox erzeugt wurde
                       // pct[i].Dispose();
                    //}
                }

                pct[Anzahl].Dispose();

                    for (int y = 0; y < 6; y++)
                    {
                        pct[y] = new PictureBox();
                        pct[y].Location = new Point(12, position_y);
                        pct[y].Size = new Size(188,24);
                        pct[y].Image = new Bitmap(bild[y]);
                        Controls.Add(pct[y]);
                        pct[y].BringToFront();
                        position_y = position_y-30;    
                     }
        }

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
adiemus84 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 25.12.10 19:26 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich das richtig verstanden habe dann willst du quasi eine picBox aus dem Array schmeißen?

Falls das gemeint war. Was würe dagegen sprechen, die lösch-ogig außerhalb der Schleife zu machen?


Es kommt auch hier leider zu einem Compilerfehler.

Als Ziel soll das Spiel die Türme von Hanoi herauskommen. Hierbei soll die Anzahl der Scheiben variiert werden können. Sobald ich die Anzahl verändere wird die Methode Start aufgerufen und alle Scheiben sollen wieder auf Anfang stehen (also das Spiel neu gestartet werden).

Ich rufe also beim Start der Anwendung die Methode Start mit dem Parameter 3 auf. Somit sind beim Start auf Säule_1 3 Scheiben. Möchte der Spieler nun mehr, so kann er über ds UpDown Feld mehr oder weniger Scheiben einstellen. Hinzufügen klappt, entfernen nicht.
lothi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 114
Erhaltene Danke: 3



BeitragVerfasst: Di 28.12.10 21:06 
Hallo

Allzu viele Scheiben würde ich nicht erlauben :-)

Eigentlich ist das nur FIFO. Dafür gibs in C# Queue<T>. Davon brauchst du 3. Für jeden Turm einen.
2 sind am Anfang leer und ein Turm ist so voll, wie der Wert eingegen wurde.
Also brauchst du "kein" Array.

Ich würde jetzt keine PictureBox verwenden sondern eher direkt Zeichnen.


Gruss Lothi
adiemus84 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 29.12.10 17:27 
user profile iconlothi hat folgendes geschrieben Zum zitierten Posting springen:

Ich würde jetzt keine PictureBox verwenden sondern eher direkt Zeichnen.

Meinst du damit GDI+?

Ich habs jetzt so gelöst:

ausblenden C#-Quelltext
1:
2:
3:
4:
if (pct[i] != null
  {
  pct[i].Dispose();
  }