【问题标题】:Event getting triggered multiple times on scroll event handler在滚动事件处理程序上多次触发事件
【发布时间】:2015-07-29 13:06:49
【问题描述】:

当我在 c# 中为面板的滚动事件添加代码时,我发现了一个奇怪的行为。

我添加了一个面板,在面板内(自动滚动 = true)有一个组框。

如下图所示,点击滚动,滚动条会移动一小段距离。

同时,当我在事件中添加消息框以显示发生滚动的通知时,弹出多个消息框。

为什么会这样?

我已经计划在滚动时添加一些逻辑,但是如果它发生多次,那怎么可能呢?

这是事件处理程序:

private void panel1_Scroll_1(object sender, ScrollEventArgs e)
{
    MessageBox.Show("ScrollBar is clicked");
}

【问题讨论】:

  • 但这是为轨迹栏解释的..
  • 需要类似的处理。你无法阻止它多次发射。您应该以该线程中解释的类似方式适当地处理它。
  • 谢谢@CharithJ,但还有一个问题..那么为什么 pic1 会这样显示?
  • 因为你的事件在滚动条位置被改变的时候被执行了多次。

标签: c# .net winforms


【解决方案1】:

这就是滚动事件的工作原理,它会在面板滚动时触发多次。

尝试ScrollEventArgs.Type EndScroll,这应该是最后一个滚动事件。

  private void panel1_Scroll_1(object sender, ScrollEventArgs e)
    {
        if (e.Type == ScrollEventType.EndScroll)
            MessageBox.Show("ScrollBar is clicked");
    }

如果上述方法对您的情况没有帮助,您将需要使用this thread 中解释的方法之一来处理这些多个事件。

【讨论】:

  • 这里不显示消息框!
  • 您是否使用鼠标单击或滚动?不是在这两种情况下都有效吗?
  • 我点击了一次..滚动也没有弹出消息框
  • 实际上我无法使用鼠标中的滚动按钮滚动..但可以通过拖动滚动条移动..但最终没有弹出窗口
  • 在此处放置一个断点,看看你得到的 e.Type 是什么? ——
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多