本帖最后由 zilong4460072 于 2011-03-17 12:54:27 编辑

解决方案 »

  1.   

    这里的vScrollBar1值的是什么?》
      

  2.   

    滚轮激发的是 scroll 消息
    如果喜欢, 不止鼠标能激发;
    scroll 消息的响应是更新内容定位和滚动条
    如果愿意, 也可以不在 scroll 消息中做所有的都要求你多了解一下基础知识.
      

  3.   

    其实就是如何激发SCROLL消息,一种方式最直接,就是在按钮里面判断下拉条的位置设置不同的值,一种就是发送消息
      

  4.   

    http://zytion.spaces.live.com/blog/cns!7788c0c97e2918ad!110.entry
      

  5.   

    protected override void OnMouseWheel(System.Windows.Forms.MouseEventArgs e) 

    }
    有些控件是没有OnMouseWheel的, 所有可以在form中添加, 以pictureBox为例C#中应用鼠标滚轮
      

  6.   

    哦我还以为是啥问题呢,你这个用个鼠标钩子就行了测试代码通过,可以结贴给分了哈哈~~~~~~~~~~~~~~~~~100分啊
    我的测试过程:新建窗体,拖一个RichTextBox,拉的比窗体大,然后将窗体的高度拉小,设置窗体的AutoScroll为True,进入代码视图,添加下面的代码,测试一下吧        [DllImport("user32.dll")]
            static extern void mouse_event(int flags, int dX, int dY, int buttons, int extraInfo);        const int MOUSEEVENTF_MOVE = 0x1;
            const int MOUSEEVENTF_LEFTDOWN = 0x2;
            const int MOUSEEVENTF_LEFTUP = 0x4;
            const int MOUSEEVENTF_RIGHTDOWN = 0x8;
            const int MOUSEEVENTF_RIGHTUP = 0x10;
            const int MOUSEEVENTF_MIDDLEDOWN = 0x20;
            const int MOUSEEVENTF_MIDDLEUP = 0x40;
            const int MOUSEEVENTF_WHEEL = 0x800;
            const int MOUSEEVENTF_ABSOLUTE = 0x8000;
            protected override bool ProcessCmdKey(ref Message msg, Keys key)
            {
                const int WM_KEYDOWN = 0x100;
                const int WM_SYSKEYDOWN = 0x104;
                if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN))
                {
                    switch (key)
                    {
                        case Keys.Down:
                            mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);
                            break;
                        case Keys.Up:
                            mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 100, 0);
                            break;
                    }
                }
                return base.ProcessCmdKey(ref msg, key);
            }
      

  7.   

    注:
    1,因为要引用user32.dll,所以命名空间要加上:using System.Runtime.InteropServices;
    2,mouse_event:
    函数功能:该函数综合鼠标击键和鼠标动作。         函数原型:VOID   mouse_event(DWORD   dwFlags,DWORD   dx,DWORD   dwFlags,OWORD   dx,DWORD   dy,   DWORD   dwData,   DWORD   dwExtralnfo);         参数:         dwFlags:标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:         MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。         MOOSEEVENTFMOVE:表明发生移动。         M00SEEVENTF_LEFTDOWN:表明接按下鼠标左键。         M00SEEVENTF_LEFTUP:表明松开鼠标左键。         MOOSEEVENTF_RIGHTDOWN:表明按下鼠标右键。         MOOSEEVENTF_RIGHTUP:表明松开鼠标右键。         MOOSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。         MOOSEEVENTF_MIDDLEUP:表明松开鼠标中键。         MOOSEEVENTF_WHEEL:在Windows   NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。         dx:指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。         dy:指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。         dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。         如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。         dwExtralnfo:指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessgeExtrajnfo来获得此附加信息。         返回值:无。 3, mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);中的-100和100表示滚轮的前后滚动距离,你可以设置它的值来控制滚动的距离
      

  8.   

    不管你怎么实现吧,只要你把mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 10, 0);写入按钮的上滚动事件、把mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -10, 0);写入按钮的下滚动事件即可
      

  9.   

    俩按钮就是两个BTN 随便放在哪里 你觉得可行不?
    我再试试你的
      

  10.   

    你的这个代码是点到滚动条上阿?
    晕 好像不用代码 鼠标点在滚动条的空白处 滚动条也会移动的吧?
    我想做的按钮你明白了嘛?
    我用的是VS2005 邮箱是[email protected]
      

  11.   

     menuStrip1.Location = new Point(0, 0);
    这里的 menuStrip1 是什么?
    打不开2010的项目 我直接把Form.cs拿出来看的
      

  12.   

    menuStrip是窗体的菜单栏,点击按钮的时候重新定位它的位置,防止滚动条滚动时将其移出界面。你也可以用其他的控件来测试,放个panel,panel中放上滚动和下滚动两个按钮,点击按钮事件中把:
    menuStrip1.Location=new Point(0,0)换为:
    panel1.Location=new Point(0,0)试试看。new Point(0,0)表示将控件放在窗体0,0坐标处,你懂的
      

  13.   


    你这个要求我看了,用不着模拟鼠标啊,你可以直接用控件的属性:
            private void 上移_Click(object sender, EventArgs e)
            {
                axAcroPDF1.gotoLastPage();
    //            mouse_event(MOUSEEVENTF_WHEEL, 0, 0,100, 0);
            }
            private void 下移_Click(object sender, EventArgs e)
            {
                axAcroPDF1.gotoNextPage();
                //mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);
            }
      

  14.   

    给你的两个解决方案:
    1,使用控件自带的属性axAcroPDF1.gotoLastPage()上一页和axAcroPDF1.gotoNextPage()下一页
       优点:调用方便;
       缺点:无法细腻的滚动,就是那种鼠标滚动条的滚动效果没有,只是跳转到下一页上一页。2,自己写事件
       优点:想怎么控制滚动就怎么控制,非常细腻附我给你修改的程序方法:
    1,删除你的两个按钮
    2,拖一个ToolStrip到窗体上,新建2个标签:上滚动和下滚动,然后设置事件即可
       优点:能完美模仿adobe阅读器
       缺点:需要敲代码哈哈
      

  15.   

    大哥,我现在就是要用按钮呀。。 不能用toolStripLabel2
    因为这个项目是做给电信营业厅的前台用的,前台都是触摸屏 当然要用按钮啦
    还有就是翻页的属性我知道,但是不好用,因为一个PAGE屏幕显示不下,只好让用户用手指点触摸屏的按钮来反动滚动条
      

  16.   

    我加了俩按钮,点按钮也触发了mouse_event的事件,但是滚动条就是不动,这是什么原因呀        private void toolStripLabel2_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 100, 0);
            }        private void toolStripLabel3_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);
            }        private void button1_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 100, 0);
            }        private void button2_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);
            }
      

  17.   


      private void toolStripLabel2_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 100, 0);
            }        private void toolStripLabel3_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);
            }        private void button1_Click(object sender, EventArgs e)
            {
                toolStripLabel2_Click(sender, e);
            }        private void button2_Click(object sender, EventArgs e)
            {
                toolStripLabel3_Click(sender, e);
            }这样还是不行饿 要么你把你加了按钮的代码再发给我看看
      

  18.   

    找到问题所在了呵呵,因为点击按钮的时候焦点在按钮上,所以无法移动滚动条如果在Button的点击事件中加入:
    axAcroPDF1.Focus();
    mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -100, 0);即先设置阅读器焦点然后滚动条的话,用户可能要点击好几次才能滚动一下,一点都不友好最终方案:拖2个ToolStrip控件入窗体,一个在窗体上方控制向上滚动,一个在窗体下方控制向下滚动。我测试了无问题,而且你还可以设计的界面十分漂亮。如图:
    测试效果很好
      

  19.   

    OK 测试成功 哈哈
    但是现在又个问题是 按钮的话要点两次才会移动 这是什么原因那        /// <summary>
            /// 上移
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button1_Click(object sender, EventArgs e)
            {
                this.axAcroPDF.Focus();
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, 500, 0);
            }要点两次 就是双击才会移动 单击不移动的
      

  20.   

    估计还是焦点问题~~~~~~~~~~我建议你用ToolStrip控件吧,无错简单好用还美观,用按钮的话虽然能重写单击事件为双击,但是为了稳定性还是不建议直接用按钮了。你看我给你的切图,用ToolStrip的Button也很好看啊,前面图片后面文字呵呵
      

  21.   

    不对,我试了下,虽然是button1_Click,但是只有双击的时候才会移动,单击是没效果的
    你说的ToolStrip我也想用阿,不是我说用就能用的
      

  22.   

    也很简单,button调用隐藏的ToolStrip点击事件(直接点击button我测试了好几个方法都不太好用,只有调用ToolStrip事件好用)
      

  23.   

    我的老大只是跟我说用按钮呀 你的意思的把toolStrip给隐藏起来 点了按钮来掉那个方法是吗 我来试试
      

  24.   


            /// <summary>
            /// 下移
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void button2_Click(object sender, EventArgs e)
            {
                下移_Click(new Object(),new EventArgs());
            }        private void 下移_Click(object sender, EventArgs e)
            {
                mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -200, 0);
            }我这样调用方法滚动条就不动了。、。 再给你加50分阿
      

  25.   

    我没用过那个ToolStrip呀,而且你截图的那个ToolStrip的左边有5个小点点,还不好调大小,要把按钮调的很大的
      

  26.   

    实在不行就用系统自带的vScrollBar替换控件的滚动条,起码事件容易写
      

  27.   

    不容易啊!建议还是换个思路吧。用ToolStrip挺好的~~~~~~~