Reputation:
I made two buttons which controls scrolling on a DataGrid OnClick. I'll like to execute the code managing the scroll when users stay press on it.
I tried on MouseDown() but the code is execute only one time.
Need help.
Upvotes: 0
Views: 1253
Reputation: 797
If you don't want to use the timer, you can always spawn a thread when needed. You only have to be careful to use Invoke() mechanism when using the UI controls, which are on the other thread.
Code:
private bool mouseDown = false;
private void buttonScrollUp_MouseDown(object sender, MouseEventArgs e)
{
mouseDown = true;
new Thread(() => {
while (mouseDown)
{
Invoke(new MethodInvoker(() => [DO_THE_SCROLLING_HERE));
Thread.Sleep([SET_AUTOREPEAT_TIMEOUT_HERE);
}
})
.Start();
}
private void buttonScrollUp_MouseUp(object sender, MouseEventArgs e)
{
mouseDown = false;
}
Code snippet above of course lacks some sanity and error cheks.
LP, Dejan
Upvotes: 1
Reputation: 9575
Main idea is to implement timer, for example every 100ms, and do your logic in tick event. Algorithm can look like:
Upvotes: 0
Reputation: 99869
Upvotes: 4