按下按钮上的C#Winform循环事件

时间:2009-07-20 09:15:31

标签: c# winforms

我制作了两个按钮,用于控制DataGrid OnClick上的滚动。我想在用户按下它时执行管理滚动的代码。

我试过MouseDown(),但代码只执行一次。

需要帮助。

3 个答案:

答案 0 :(得分:4)

  • 当你收到鼠标按下事件时,设置一个计时器,每隔200ms开始调用一次“滚动”回调函数(随机猜测时间)。
  • 在计时器回调中,滚动一个“缺口”(无论你做多少。)
  • 当您获得鼠标按钮时,请停止计时器。

答案 1 :(得分:1)

如果您不想使用计时器,则可以在需要时始终生成线程。在使用另一个线程上的UI控件时,您只需要小心使用Invoke()机制。

代码:

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;
}

上面的代码片段当然缺乏一些理智和错误。

LP, 德扬

答案 2 :(得分:0)

主要思想是实现计时器,例如每100毫秒,并在tick事件中执行你的逻辑。算法看起来像:

  1. 在MouseDown事件中捕获鼠标并启动计时器
  2. 在MouseMove中,如果没有设置标志
  3. ,则检测光标仍然在按钮上
  4. 在计时器中,勾选检查标志是鼠标悬停按钮,并执行滚动逻辑
  5. 在MouseUp事件中释放鼠标捕获并停止计时器