C# Solange Button aktiv...

mayhem

Grünschnabel
Ich habe ein Button, der ein Ereignis auslösen soll, solange er gedrückt ist. Weiss jemand, wie man das macht?

Als Bsp. Funktion:
Code:
double i=0;
i++;
Er soll meinetwegen solange i++ rechnen, bis ich aufhöre zu drücken.

Muss ich dann sowas wie: while(button.?) oder gibt es da eine andere Möglichkeit?

DANKE
 
Hi

Also ich glaub, du wirst die Events MouseButtonUp und -Down abonnieren müssen.
Im Down-Event startest du deinen Zähler, im Up beendest du ihn wieder.
 
Könnte mir jemand ein kleinen Quellcode dazu schreiben? Ich habe nämlich ein bischen rumprobiert, aber da ist leider nichts ordentliches bei rum gekommen.

Wenn ich bei dem Event MouseDown etwas hereinschreiben, z. B.:

Info:
- button_XBplus ist (wie das Wort schon sagt) ein Button
- body ist ein integer (am Anfang = 0)
- anzeige ein label


Code:
        private void button_XBplus_MouseDown(object sender, MouseEventArgs e)
        {
                anzeige.Text = body.ToString();
        }

dann zeigt er mir den Wert "body" in dem Label "anzeige" an.
Ich würde es gerne so haben, dass er den Wert "body" hochzählt.
In etwa so:

Code:
        private void button_XBplus_MouseDown(object sender, MouseEventArgs e)
        {
                while( //der button gedrückt wird)
                {
                         body++;
                         anzeige.Text = body.ToString();
                }
        }

Was könnte man da in der While-Schleife packen?

Danke für eure Hilfe!
 
Hallo!

Erstelle einfach einen Thread der gestartet wird bei MouseDown und gestoppt wird bei MouseUp.
Und in diesem Thread lässt du die Variable hochzählen und Anzeigen und nebenbei baust du mit sleep(); noch eine Verzögerung ein, weil es sonst zu schnell gehen würde ;)

Oder du rufst bei MouseDown eine Methode auf, die in einer While-Schleife selbiges macht. Bedingung für die while-Schleife ist beispielsweise ein globales boolsches Flag, welches auf false gesetzt wird, sobald MouseUp aufgerufen wird.
Damit breakst du aus der Schleife und der Count ist beendet.
 
Ich habe einen Timer auf die Form gezogen und dann folgendes geschrieben:

Code:
        private void button_test_Click(object sender, EventArgs e)
        {
            mytimer();
            label1.Text = "hallo";
        }

        public void mytimer()
        {
            timer.Interval = 5000;
            timer.Enabled = true;
        }

        public void timer_Tick(object sender, EventArgs e)
        {
        }

Aber sobald ich den Button klicke, steht in dem Label "hallo". Ich dachte, da werden erst 5000 ms gezählt?!
 
Hier, probiers mal damit:
Code:
using System.Threading;
Code:
private Thread thread;
private ThreadStart threadstart;
Code:
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
         threadstart = new ThreadStart(start);
	thread = new Thread(threadstart);
	thread.Start();
}

private void button1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
	thread.Abort();
}

private void start()
{
	while(true)
	{
		label1.Text = Convert.ToString(Convert.ToInt32(label1.Text)+1);
		Thread.Sleep(500);
	}
}

Der Code ist simpel, aber er funktioniert.
Hoffe geholfen zu haben.
 
Zuletzt bearbeitet:
Hallo
Wie kann ich das gleiche für Poket PC Gäreteanwendung machen?
Da gibt es keine MouseDown Event für eine Button.
Vielen Dank
 
Zurück