开发 基于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 }