(转) 实现wince datagrid 上下滑屏数据浏览

开发 基于wince 手持设备数据库应用时 由于是触摸屏 当datagrid 数据过多 往往用户烦于去控制又窄又细的上下滚动条 尤其是高分辨率的屏上 (如魅族M8系统 720×480)

而且datagrid 不支持触摸拖动 所以自己研究出来如下 事件组合 

 1       //x y 是静态变量 鼠标按下 坐标记录  
 2 
 3       private void dataGrid2_MouseDown(object sender, MouseEventArgs e)
 4         {
 5             x = e.X;
 6             y = e.Y;
 7         }
 8 
 9      // 鼠标滑动事件处理
10 
11         private void dataGrid2_MouseMove(object sender, MouseEventArgs e)
12         {
13             try
14             {
15                 //当前鼠标y坐标值与滑动开始y值的差 给予datagrid 上下滑动距离值
16                 yy = e.Y - y;
17 
18                 //25 值 datagrid行高值(这个值不定 需要自己反复试得到理想值) 根据距离给定滑动行数
19                 yy = yy / 25;
20 
21               
22    
23                     dataGrid2.CurrentRowIndex = dataGrid2.CurrentRowIndex + yy;
24               }
25 
26             //捕捉不做任何处理
27             catch
28             { }
29         }

使用 效果不错!

测试发现这个并不是很好使,后来又自己定义添加的新方法比较好使

在datagrid上的Controls成员内有三个成员比较重要,其中Controls[1]表示的滚动条

我们在拖动滚动条的时候datagrid可以上下滚动,如果将鼠标的拖动绑定在滚动条的滚动上,基本上就可以实现对datagrid的拖动了,因此实现手段如下

 1         private static int y1;//定义存储变量
 2         private static int ScrMinimum;//scrollbar的最大最小值
 3         private static int ScrMaximum;
 4         VScrollBar ScrBar = new VScrollBar(); //新建一个滚动条
 5         private void MouseDown(object sender, MouseEventArgs e)
 6         {
 7             try
 8             {
 9                 y1 = e.Y;
10                 ScrBar = (VScrollBar)dG_Task.Controls[1];//获取datagrid上的滚动条 竖状
11                 ScrMinimum = ScrBar.Minimum;
12                 ScrMaximum = ScrBar.Maximum;
13             }
14             catch (System.Exception ex)
15             {
16             }            
17         }
18         void MouseMove(object sender, MouseEventArgs e)
19         {
20                     
21             try
22             {
23                int _dec = y1-e.Y;
24                int _NewValue= ScrBar.Value + _dec/25;//选取一个合适的滚动值
25                if (_NewValue < ScrMinimum)
27                    ScrBar.Value = ScrMinimum;
28                else if (_NewValue > ScrMaximum)
29                    ScrBar.Value = ScrMaximum;
30                else
31                    ScrBar.Value = _NewValue;
32             }
33             catch (System.Exception ex)
34             {            
35             }
36         }
原文地址:https://www.cnblogs.com/FuYan/p/4126287.html