如何获取panel的滚动条的鼠标事件呢?

air123456789 2013-11-05 11:12:19
我想在panel的滚动条位置改变时,操作某个方法。
如果直接调用panel的Scroll 事件, 如果是用鼠标拖动滚动条,则会触发很多次, 怎样才能在滚动完成时候只触发一次呢? 是想鼠标在滚动条上放开的时候出发一次,但是没有找到该事件。
...全文
105 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
美丽的鸡翅膀 2013-11-05
  • 打赏
  • 举报
回复
那用API好了,我写过一个关于滚动条的的,用这个函数 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern bool GetScrollInfo(IntPtr hWnd, int fnBar,ref SCROLLINFO si);

 protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                 //滚动条消息
                case 0x115:
                    //将滚动条的信息写入列表
                    wps.Add(Convert.ToString(m.WParam.ToInt32(), 16));
                  
                    switch (m.WParam.ToInt32())
                    {
                        //鼠标抬起
                        case 8:
                            if (wps[wps.Count - 2].Contains(Convert.ToString(index + 1,16)))
                            MessageBox.Show("bottom");
                            break;
                    }
                    break;
                default:
                    break;
            }
            base.WndProc(ref m);
        }
滚动完成的时候会触发8,你看看怎么样,我的资源里有源码下载
air123456789 2013-11-05
  • 打赏
  • 举报
回复
引用 1 楼 shenwenjie06 的回复:
设一个全局变量bool IsScroll,在Scroll 事件里打开,在mouseup事件里面判断是不是刚停止滚动。
试过了,点击滚动条 是不触发 panel的mouseup事件的。
美丽的鸡翅膀 2013-11-05
  • 打赏
  • 举报
回复
设一个全局变量bool IsScroll,在Scroll 事件里打开,在mouseup事件里面判断是不是刚停止滚动。
air123456789 2013-11-05
  • 打赏
  • 举报
回复
引用 3 楼 shenwenjie06 的回复:
那用API好了,我写过一个关于滚动条的的,用这个函数 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern bool GetScrollInfo(IntPtr hWnd, int fnBar,ref SCROLLINFO si);

 protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
                 //滚动条消息
                case 0x115:
                    //将滚动条的信息写入列表
                    wps.Add(Convert.ToString(m.WParam.ToInt32(), 16));
                  
                    switch (m.WParam.ToInt32())
                    {
                        //鼠标抬起
                        case 8:
                            if (wps[wps.Count - 2].Contains(Convert.ToString(index + 1,16)))
                            MessageBox.Show("bottom");
                            break;
                    }
                    break;
                default:
                    break;
            }
            base.WndProc(ref m);
        }
滚动完成的时候会触发8,你看看怎么样,我的资源里有源码下载
0x114 是横滚动条的,可是呢,现在发现,用鼠标的中间的滚动轴来滚动,居然没有触发滚动条的Scroll事件,现在不知道滚动轴滚动的API是多少了

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧