none
位于Windows Form中Panel滚动条响应鼠标滚轮事件的问题。 RRS feed

  • 问题

  • 描述:

          Form中的Panel的AutoScroll = true,通过Form获取滚轮事件后让Panel获取焦点。当Panel只出现HorizontalScroll时,由HorizontalScroll响应滚轮事件;当VerticalScroll出现时,由VerticalScroll响应滚轮事件;当VerticalScroll和HorizontalScroll同时出现时,由VerticalScroll响应滚轮事件,HorizontalScroll不响应。

    问题:

          当VerticalScroll和HorizontalScroll同时出现时,怎么让HorizontalScroll来响应滚轮事件,而不是VerticalScroll。

    代码:

    	private void FormMain_Load(object sender, EventArgs e)
            {
                this.MouseWheel += FormMain_MouseWheel;
            }
    
    	void FormMain_MouseWheel(object sender, MouseEventArgs e)
            {
                this.panelTest.Focus();
            }

    谢谢!

         



    2013年6月20日 7:10

答案

  • 你的问题应该是说反了吧,因为你前面说的是VerticalScroll和HorizontalScroll同时出现,由VerticalScroll想要滚轮事件,而问题确实由HorizontalScroll来想要滚轮事件的,不管怎样,我先假设为同时存在时,就由VerticalScroll响应滚轮事件吧,因为这个也是一般程序中设计

    代码为:

    private void FormMain_Load(object sender, EventArgs e)
            {
                this.MouseWheel += FormMain_MouseWheel;
            }
    
    	void FormMain_MouseWheel(object sender, MouseEventArgs e)
            {
                this.panelTest.Focus();
            // 同时存在水平滚动条和垂直滚动条的情况   if(panelTest.VerticalScroll.Visible==true&&panelTest.HorizontalScroll.Visible==true)
    {
    // 只改变垂直滚动条的高度
     panelTest.VerticalScroll.Value += 10;
    }
    // 如果只有垂直滚动条的情况
    if(panelTest.VerticalScroll.Visible==true&&panelTest.HorizontalScroll.Visible==false)
    {
    // 只改变垂直滚动条的高度
     panelTest.VerticalScroll.Value += 10;
    }
    // 如果只有水平滚动条的情况
    if(panelTest.VerticalScroll.Visible==false&&panelTest.HorizontalScroll.Visible==true)
    {
    // 只改变垂直滚动条的高度
     panelTest.HorizontalScroll.Value += 10;
    }
    
            }

    上面代码只是部分逻辑代码, 你需要更具自己的需要做一些调整,更多内容你也可以参考下面的文章来实现:

    http://www.cnblogs.com/holygis/archive/2010/02/22/1670931.html


    If my post is helpful,please help to vote as helpful, if my post solve your question, please help to make it as answer. My sample

    • 已标记为答案 Wayne.China 2013年6月20日 10:01
    2013年6月20日 9:00

全部回复

  • Wayne.China:

    你把你的项目上传一下,我没有理解你啥意思?


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年6月20日 7:43
    版主
  • 你的问题应该是说反了吧,因为你前面说的是VerticalScroll和HorizontalScroll同时出现,由VerticalScroll想要滚轮事件,而问题确实由HorizontalScroll来想要滚轮事件的,不管怎样,我先假设为同时存在时,就由VerticalScroll响应滚轮事件吧,因为这个也是一般程序中设计

    代码为:

    private void FormMain_Load(object sender, EventArgs e)
            {
                this.MouseWheel += FormMain_MouseWheel;
            }
    
    	void FormMain_MouseWheel(object sender, MouseEventArgs e)
            {
                this.panelTest.Focus();
            // 同时存在水平滚动条和垂直滚动条的情况   if(panelTest.VerticalScroll.Visible==true&&panelTest.HorizontalScroll.Visible==true)
    {
    // 只改变垂直滚动条的高度
     panelTest.VerticalScroll.Value += 10;
    }
    // 如果只有垂直滚动条的情况
    if(panelTest.VerticalScroll.Visible==true&&panelTest.HorizontalScroll.Visible==false)
    {
    // 只改变垂直滚动条的高度
     panelTest.VerticalScroll.Value += 10;
    }
    // 如果只有水平滚动条的情况
    if(panelTest.VerticalScroll.Visible==false&&panelTest.HorizontalScroll.Visible==true)
    {
    // 只改变垂直滚动条的高度
     panelTest.HorizontalScroll.Value += 10;
    }
    
            }

    上面代码只是部分逻辑代码, 你需要更具自己的需要做一些调整,更多内容你也可以参考下面的文章来实现:

    http://www.cnblogs.com/holygis/archive/2010/02/22/1670931.html


    If my post is helpful,please help to vote as helpful, if my post solve your question, please help to make it as answer. My sample

    • 已标记为答案 Wayne.China 2013年6月20日 10:01
    2013年6月20日 9:00
  •       感谢您的回复,最终还是在FormMain中处理滚轮消息而解决问题。不知道能不能设置Panel.HorizontalScroll或者Panel.HorizontalScroll的某个属性,让其不响应或者响应滚轮消息。学着C#,竟然还要手动去写这样的方法,真是不习惯。。哈哈~

    手动调整滚动条:

            void FormMain_MouseWheel(object sender, MouseEventArgs e)
            {
    //             this.splitContainerControl.Panel2.Focus();// Form响应滚轮,手动调整滚动条位置,所以不用Focus。
                if (this.splitContainerControl.Panel2.HorizontalScroll.Visible == true)
                {
                    // 只让水平滚动条响应
                    int oldValue = this.splitContainerControl.Panel2.HorizontalScroll.Value;
                    this.splitContainerControl.Panel2.HorizontalScroll.Value -= e.Delta;
                    if (this.splitContainerControl.Panel2.HorizontalScroll.Value == oldValue)
                    {
                        this.splitContainerControl.Panel2.HorizontalScroll.Value = e.Delta<0 ? this.splitContainerControl.Panel2.HorizontalScroll.Maximum : this.splitContainerControl.Panel2.HorizontalScroll.Minimum;
                    }
                }
            }
    

    2013年6月20日 9:58
  •       感谢您的关注与回复,问题暂时解决了。吃饭了~
    2013年6月20日 10:00