Hallo zusammen,
ich habe folgende Situation:
Ich zeichne zwei Linien immer neu bis sie den Rand erreicht haben und dann änder ich die Richtung. Das ganze geschieht anzahlWiederholungen mal, wenn ich einen Button Animation Start klicke. Soweit klappt alles. Nun habe ich den Button disabled damit mann ihn nicht mehrmals drücken kann, sonst geht die Animation gleich wieder los. Aber trotz das er grau dargestellt wird merkt er sich den Klick und führt die Animation ein zweites mal durch was er nicht machen soll. Kann mir jemand sagen was ich da machen kann?
Danke. Folgend der Code:
[highlight=c++]
private: System::Void buttonAnimation_Click(System::Object^ sender, System::EventArgs^ e) {
buttonAnimation->Enabled = false;
//eine lokale Variable für die Größe
Int32 groesse;
Int32 anzahlWiederholungen=Convert::ToInt32(textBoxAnzah lWiederholungen->Text);
Int32 geschwindigkeit=Convert::ToInt32(textBoxGeschwindi gkeit->Text);
Int32 schritt=0;
Int32 durchlauf=0;
//einen Stift mit der aktuellen Farbe erzeugen
Pen ^stift = gcnew Pen(linienFarbe);
//einen Pinsel in der aktuellen Farbe erzeugen
SolidBrush ^pinsel = gcnew SolidBrush(hintergrundFarbe);
//den Linienstil setzen
if (listBoxLinieStil->SelectedIndex >= 0)
stift->DashStyle = linienstil[listBoxLinieStil->SelectedIndex];
//die Dicke des Stiftes setzen
stift->Width=Convert::ToSingle(numericUpDownLinieStaer ke->Value);
//die Größe der Figur ermitteln
switch (trackBar1->Value) {
case 1: groesse=125;
break;
case 2: groesse=100;
break;
case 3: groesse=75;
break;
}
if (radioButtonLinie->Checked == true)
{
Boolean schalter = true;
do
{
if (panel1->ClientRectangle.Height / 2 - schritt == panel1->ClientRectangle.Height)
schalter = true;
if (panel1->ClientRectangle.Height / 2 - schritt == panel1->ClientRectangle.Top)
schalter = false;
switch(schalter)
{
case true:
if (durchlauf == anzahlWiederholungen)
break;
else
//die Zeichenfläche löschen
zeichenflaeche->Clear(panel1->BackColor);
schritt++;
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 - schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 - schritt);
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 + schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 + schritt);
durchlauf++;
labelDurchlauf->Text=Convert::ToString(durchlauf);
labelDurchlauf->Refresh();
System::Threading::Thread::Sleep(geschwindigkeit);
break;
case false:
if (durchlauf == anzahlWiederholungen)
break;
else
//die Zeichenfläche löschen
zeichenflaeche->Clear(panel1->BackColor);
schritt--;
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 + schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 + schritt);
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 - schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 - schritt);
durchlauf++;
labelDurchlauf->Text=Convert::ToString(durchlauf);
labelDurchlauf->Refresh();
System::Threading::Thread::Sleep(geschwindigkeit);
break;
}
}while(durchlauf != anzahlWiederholungen);
schritt=0;
durchlauf=0;
//Stift und Pinsel löschen
delete stift;
}
buttonAnimation->Enabled = true;
}[/highlight]
ich habe folgende Situation:
Ich zeichne zwei Linien immer neu bis sie den Rand erreicht haben und dann änder ich die Richtung. Das ganze geschieht anzahlWiederholungen mal, wenn ich einen Button Animation Start klicke. Soweit klappt alles. Nun habe ich den Button disabled damit mann ihn nicht mehrmals drücken kann, sonst geht die Animation gleich wieder los. Aber trotz das er grau dargestellt wird merkt er sich den Klick und führt die Animation ein zweites mal durch was er nicht machen soll. Kann mir jemand sagen was ich da machen kann?
Danke. Folgend der Code:
[highlight=c++]
private: System::Void buttonAnimation_Click(System::Object^ sender, System::EventArgs^ e) {
buttonAnimation->Enabled = false;
//eine lokale Variable für die Größe
Int32 groesse;
Int32 anzahlWiederholungen=Convert::ToInt32(textBoxAnzah lWiederholungen->Text);
Int32 geschwindigkeit=Convert::ToInt32(textBoxGeschwindi gkeit->Text);
Int32 schritt=0;
Int32 durchlauf=0;
//einen Stift mit der aktuellen Farbe erzeugen
Pen ^stift = gcnew Pen(linienFarbe);
//einen Pinsel in der aktuellen Farbe erzeugen
SolidBrush ^pinsel = gcnew SolidBrush(hintergrundFarbe);
//den Linienstil setzen
if (listBoxLinieStil->SelectedIndex >= 0)
stift->DashStyle = linienstil[listBoxLinieStil->SelectedIndex];
//die Dicke des Stiftes setzen
stift->Width=Convert::ToSingle(numericUpDownLinieStaer ke->Value);
//die Größe der Figur ermitteln
switch (trackBar1->Value) {
case 1: groesse=125;
break;
case 2: groesse=100;
break;
case 3: groesse=75;
break;
}
if (radioButtonLinie->Checked == true)
{
Boolean schalter = true;
do
{
if (panel1->ClientRectangle.Height / 2 - schritt == panel1->ClientRectangle.Height)
schalter = true;
if (panel1->ClientRectangle.Height / 2 - schritt == panel1->ClientRectangle.Top)
schalter = false;
switch(schalter)
{
case true:
if (durchlauf == anzahlWiederholungen)
break;
else
//die Zeichenfläche löschen
zeichenflaeche->Clear(panel1->BackColor);
schritt++;
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 - schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 - schritt);
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 + schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 + schritt);
durchlauf++;
labelDurchlauf->Text=Convert::ToString(durchlauf);
labelDurchlauf->Refresh();
System::Threading::Thread::Sleep(geschwindigkeit);
break;
case false:
if (durchlauf == anzahlWiederholungen)
break;
else
//die Zeichenfläche löschen
zeichenflaeche->Clear(panel1->BackColor);
schritt--;
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 + schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 + schritt);
zeichenflaeche->DrawLine(stift, panel1->ClientRectangle.Left + groesse, panel1->ClientRectangle.Height / 2 - schritt, panel1->ClientRectangle.Width - groesse, panel1->ClientRectangle.Height / 2 - schritt);
durchlauf++;
labelDurchlauf->Text=Convert::ToString(durchlauf);
labelDurchlauf->Refresh();
System::Threading::Thread::Sleep(geschwindigkeit);
break;
}
}while(durchlauf != anzahlWiederholungen);
schritt=0;
durchlauf=0;
//Stift und Pinsel löschen
delete stift;
}
buttonAnimation->Enabled = true;
}[/highlight]
Comment