如何收到“滚动框”从DataGridView类型滚动事件? [英] How can I receive the "scroll box" type scroll events from a DataGridView?

查看:99
本文介绍了如何收到“滚动框”从DataGridView类型滚动事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个DataGridView,我正在听它的Scroll事件。这给我一个ScrollEventArgs对象,其类型成员应该告诉我发生的滚动事件的类型。在 MSDN文档页面上,它说我应该通过侦听类型为ThumbPosition,ThumbTrack,First,Last和EndScroll的事件,可以检测滚动框的移动。



但是,当我拖动滚动框时,我仅获取类型为LargeDecrement和LargeIncrement的事件。



如何访问ThumbPosition,ThumbTrack,First,Last和EndScroll事件?

解决方案

  using System.Reflection; 
使用System.Windows.Forms;

bool addScrollListener(DataGridView dgv)
{
bool ret = false;

类型t = dgv.GetType();
PropertyInfo pi = t.GetProperty(VerticalScrollBar,BindingFlags.Instance | BindingFlags.NonPublic);
ScrollBar s = null;

if(pi!= null)
s = pi.GetValue(dgv,null)as ScrollBar;

if(s!= null)
{
s.Scroll + = new ScrollEventHandler(s_Scroll);
ret = true;
}

return ret;
}

void s_Scroll(object sender,ScrollEventArgs e)
{
// Hander去这里..
}

正如你所料,如果你想听水平滚动事件,你将VerticalScrollBar更改为Horizo​​ntalScrollBar


I have a DataGridView, and I'm listening to its Scroll event. This gives me a ScrollEventArgs object whose Type member is supposed to tell me the type of scroll event that has occurred. On the MSDN documentation page it says I should be able to detect movement of the scroll box by listening for events with types ThumbPosition, ThumbTrack, First, Last and EndScroll.

However, when I drag the scroll box, I only get events of type LargeDecrement and LargeIncrement.

How do I get access to the ThumbPosition, ThumbTrack, First, Last and EndScroll events?

解决方案

using System.Reflection;
using System.Windows.Forms;

bool addScrollListener(DataGridView dgv)
{
    bool ret = false;

    Type t = dgv.GetType();
    PropertyInfo pi = t.GetProperty("VerticalScrollBar", BindingFlags.Instance | BindingFlags.NonPublic);
    ScrollBar s = null;

    if (pi != null)
        s = pi.GetValue(dgv, null) as ScrollBar;

    if (s != null)
    {
        s.Scroll += new ScrollEventHandler(s_Scroll);
        ret = true;
    }

    return ret;
}

void s_Scroll(object sender, ScrollEventArgs e)
{
    // Hander goes here..
}

As you'd expect, if you want to listen to horizontal scroll events, you change "VerticalScrollBar" to "HorizontalScrollBar"

这篇关于如何收到“滚动框”从DataGridView类型滚动事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆