欢迎光临:
  
  非常感谢您光临枕善居。本站是一个免费的基于VB,VB.NET源代码交流的平台,为大家提供优质的专业的源代码,如果您有需要,本站可以帮助在业余时间里给您寻找代码。当然,如果您有好的代码也可以在本站发布,共享给大家。
专业VB和.NET源码、编程开发教程、图标资源、USB电脑遥控器、智能家电控制开关....更多东东请进入我的淘宝小店--->
VB及.NET新源码2011(3DVD,控件+资源) 智能多路控制(串口编程开关) 带源码!


07-05
17

怎样使DataGrid支持鼠标滚轮滚动记录

在本站的VB源码《数据网格下拉列表框控件》中(链接地址:http://www.mndsoft.com/blog/article.asp?id=214)中,网友 taomaintao 提示支持滚轮鼠标,其实原本代码有已经有部分API代码意图支持鼠标滚轮,但可能作者后来没有加上。基于此,我找到一个解决办法(来自网络),taomaintao 网友可以按照下面自己进行修改吧。

首先在DataGrid 的 【拆分】 属性中的【选取框样式】设置为 3,即整行高亮选择,然后加入如下代码就支持了,只要让鼠标的焦点在grid控件上,滚动鼠标滑轮,grid滚动条会自动滚动的。

如果需要更平滑的滚动以及自定义滚动方法,我还有个代码,到时发给你,你自己研究吧。

示例操作方法:
将以下代码写到公共模块中  
    
  '支持滚轮鼠标API---------------------------------  
          Public   Const   GWL_WNDPROC   =   (-4)  
          Public   Const   WM_COMMAND   =   &H111  
          Public   Const   WM_MBUTTONDOWN   =   &H207  
          Public   Const   WM_MBUTTONUP   =   &H208  
          Public   Const   WM_MOUSEWHEEL   =   &H20A  
            
          Public   Oldwinproc   As   Long  
          Public   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hWnd   As   Long,   _  
                                                          ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
            
          Public   Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Long,   _  
                                                          ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
            
          Public   Declare   Function   GetWindowLong   Lib   "user32"   Alias   "GetWindowLongA"   (ByVal   hWnd   As   Long,   _  
                                                          ByVal   nIndex   As   Long)   As   Long  
  Public   Function   FlexScroll(ByVal   hWnd   As   Long,   ByVal   wMsg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
  '支持滚轮的滚动   Yu   2004-5-10   15:33  
          Select   Case   wMsg  
          Case   WM_MOUSEWHEEL  
                  Select   Case   wParam  
                  Case   -7864320     '向下滚  
                          SendKeys   "{PGDN}"  
                  Case   7864320       '向上滚  
                          SendKeys   "{PGUP}"  
                  End   Select  
                                      
          End   Select  
          FlexScroll   =   CallWindowProc(Oldwinproc,   hWnd,   wMsg,   wParam,   lParam)  
  End   Function  
  '支持滚轮鼠标API---------------------------------  
    
    
  '将下列代码写到表格控件的GotFocus事件中  
  Private   Sub   控件名称_GotFocus()  
          Oldwinproc   =   GetWindowLong(Me.hWnd,   GWL_WNDPROC)  
          SetWindowLong   Me.hWnd,   GWL_WNDPROC,   AddressOf   FlexScroll  
  End   Sub  
    
  '将下列代码写到表格控件的LostFocus事件中  
  Private   Sub   控件名称_LostFocus()  
          SetWindowLong   Me.hWnd,   GWL_WNDPROC,   Oldwinproc  
  End   Sub  

图片来自:
网站:枕善居VB及.NET源码博客
网址http://www.mndsoft.com/blog/
【VB和.NET专业源码+解决方案+数据字典DVD光盘(全国包快递)】  点击查看源代码清单


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: DataGrid 鼠标滚轮
评论: 9 | 引用: 0 | 查看次数: 11351

回复回复jdsj [2010-12-16 11:32:47 | del]
感谢,成功解决了。
回复回复macalun [2009-12-29 16:36:57 |  | del]
引用来自 linger505 引用来自 linger505
                  Select Case wParam
                  Case -7864320       '向下滚
                          'SendKeys "{PGDN}"
                         DataGrid1.Scroll 0, 1
                  Case 7864320         '向上滚
                          'SendKeys "{PGUP}"
                          DataGrid1.Scroll 0, -1
                  End Select
粗体部分的一次只滚动一行.


这个方法可能对于窗体中只有一个表格的比较实用,多个表格 可能就不适用了。
我的试验方法是
   sendkeys{"down"}/sendkeys{"up"}
这样一次滚动一行,多个表格也可以方便控制,只要获得焦点即可。

不过好像在我的程序中,通过一个表格来控制多个表格的记录集时,这个表格滚动时不太流畅,可能查询花了时间吧。
回复回复linger505 [2008-06-28 23:33:45 |  | del]
                  Select Case wParam
                  Case -7864320       '向下滚
                          'SendKeys "{PGDN}"
                         DataGrid1.Scroll 0, 1
                  Case 7864320         '向上滚
                          'SendKeys "{PGUP}"
                          DataGrid1.Scroll 0, -1
                  End Select
粗体部分的一次只滚动一行.
回复回复mychoose98 [2008-04-25 10:28:47 |  | del]
谢谢,共享,活雷锋
回复回复jacklee [2007-06-21 15:03:21 |  | del]
经测试没问题,学到不少东西,居主能否发给我一份能平滑滚动的代码,现在的是一次滚动3行,我的邮箱jackleeboy01@163.com,万分感谢!!
回复回复taomaintao [2007-05-31 22:06:49 |  | del]
其实在开始我就用了你说的这种方法了,今晚又试了,还是不行.5555555
回复回复taomaintao [2007-05-31 22:06:19 |  | del]
在DataGrid 的 【拆分】 属性中的【选取框样式】设置为 3,即整行高亮选择

控件本身就是这个属性,另外我按你说的方法做了,但还是不行,原因为根本没有办法让datagrid得到焦点,代码确实有些复杂,焦身始终位于那个textbox上,请大哥帮忙改一下吧,你对VB精通,花不了多少时间,我可是请了好多高手也没法解决,问了好多人,加起来有几天的时间了,试了很多方法,就帮帮我吧.
十二分的感谢大哥,我会长期支持本站的,祝越办越好.

也请同行的朋友帮帮忙吧.

QQ:25241894
回复回复taomaintao [2007-05-31 21:53:05 |  | del]
谢谢大哥,我马上研究一下,还没有解决呢
回复回复野兽 [2007-05-28 15:21:27 |  | del]
谢谢
从这里,我学了很多东西
发表评论
您没有权限发表评论!