Hallo,
Ich will, für ein Programm, dass ein Panel des Fensters die Farbe ändert. und zwar soll er alle Panels im Fenster durchgehen, diejenigen bei denen Enabled == true zutrifft, soll er in ein Array ablegen, und dann per zufall eines auswählen, und dieses anders färben. Jetzt ist das Problem, dass er, trotz einer If - Anweisung, immer wieder Panels doppelt auswählt, also sie in das Array tut, obwohl Enabled == true nicht zutrifft.
Hier mal der Quelltext. Ich habs mit Debuggen versucht, den fehler aber nicht gefunden. Vielleicht sieht ihn ja einer von euch.
this->feldzahl = 0;
Panel ^pan = gcnew Panel();
for each(Control ^c in this->Controls)
{
pan = dynamic_cast<Panel^> (c);
if (pan != nullptr)
{
if(pan->Enabled == true)
{
felder[feldzahl] = pan;
feldzahl += 1;
}
}
}
for(int i = 0; i < felder->Length; i++)
{
if(felder[i] == nullptr)
this->textBox1->Text += "nullptr";
else
this->textBox1->Text += felder[i]->Name;
}
Random ^feld = gcnew Random();
int zahl;
Panel ^panel = gcnew Panel();
zahl = feld->Next(this->felder->Length);
while(felder[zahl] == nullptr)
{
zahl = feld->Next(this->felder->Length);
}
panel = felder[zahl];
panel->Enabled = false;
if(panel->BackColor == Color::Red)
panel->BackColor = Color::Yellow;
else
panel->BackColor = System::Drawing::Color::Red;
// this->textBox2->Text += panel->Enabled.ToString();
// this->textBox2->Text += panel->Enabled.ToString();
if(panel1->Enabled == false && panel2->Enabled == false && panel3->Enabled == false && panel4->Enabled == false && panel4->Enabled == false && panel5->Enabled == false)
{MessageBox::Show("Alle Felder sind Belegt");}
Chrissoftan Freeware - Live is Binary