【问题标题】:Get Whether the user is scrolling a DataGridView or not获取用户是否正在滚动 DataGridView
【发布时间】:2013-08-12 15:36:25
【问题描述】:

我正在寻找用户当前是否按住垂直滚动条。

这个问题源于当 DataGridView 的 DataSource 更新时滚动被取消的事实。

我希望做一个像IsUserScrolling() 这样的扩展方法来装上DataGridView。这个想法是在用户停止滚动之前我不会更新 DataGridView。

【问题讨论】:

  • 环球先生,如果我的回答对您有帮助,请采纳,如果您还有任何问题,我在这里

标签: c# winforms datagridview


【解决方案1】:

您可以知道用户是否通过Scroll 事件滚动DataGridView,您可以知道用户是否在Thumb 上按住鼠标并通过其ScrollEventArgs 滚动,如下所示:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){
  if(e.ScrollOrientation == ScrollOrientation.VerticalScroll &&
     (e.Type == ScrollEventType.LargeIncrement || e.Type == ScrollEventType.LargeDecrement)){
     //your code here
  }
}

上面的代码几乎可以正常工作,但是您可以通过编程方式将VerticalScroll.Value(不存在)更改为Large Change,即使用户没有在垂直拇指上按住鼠标,该事件也会被触发。所以我们可以添加条件MouseButtons == MouseButtons.Left 让它更好地工作:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){
  if(e.ScrollOrientation == ScrollOrientation.VerticalScroll && MouseButtons == MouseButtons.Left &&
     (e.Type == ScrollEventType.LargeIncrement || e.Type == ScrollEventType.LargeDecrement)){
     //your code here
  }
}

另一种使用HitTest 方法检测用户是否在垂直滚动条(ThumbArrow Repeat button)上到处按住鼠标的简短方法,您可以添加更多代码以使其更可靠地工作,这样我们就不会'不会错过带有真实用户滚动操作的某种程序化滚动:

private void dataGridView1_Scroll(object sender, ScrollEventArgs e){
  Point p = dataGridView1.PointToClient(MousePosition);
  if (dataGridView1.HitTest(p.X, p.Y).Type == DataGridViewHitTestType.VerticalScrollBar){
     //Your code here
  }
}

【讨论】:

    【解决方案2】:

    我已经搜索并找到了答案。这可能不是完美的答案,但它有效:

    我创建了一个dataGridView,并创建了一个hScrollBar,将hScrollBar 放在dataGridView 滚动条的顶部(如果你的意思是垂直的,你可以使用vScrollBar),设置宽度滚动条与dataGridView 相同,并且在 Scroll 事件中,我做到了:

      private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
      {
         dataGridView1.HorizontalScrollingOffset = hScrollBar1.Value;
      }
    

    这样您就可以使用hScrollBarMouseDownMouseUp 事件。你来了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多