如何获取面板上的滚动条位置? WinForms C#

时间:2013-10-26 05:59:06

标签: c# winforms scroll scrollbar

我正在尝试获取面板上的滚动条位置,但如果我通过单击并拖动滚动条或单击其滚动按钮来滚动它,则可以使用它。

如果我使用鼠标滚轮滚动面板,则无效。

这是我的代码:

if (mypanel.HorizontalScroll.Value > 500)
        {
            lbl1.Text = "A";
        }
        if (mypanel.HorizontalScroll.Value < 300)
        {
            lbl1.Text = "B";
        }

2 个答案:

答案 0 :(得分:2)

ScrollMouseWheel不同。滚动时,表示您必须使用ScrollBar滚动它,消息WM_HSCROLLWM_VSCROLL将被发送到控件。当您使用Mouse时,您还可以使用scrollable container like Panel中有1个子控件聚焦的条件进行滚动,消息WM_MOUSEWHEEL将被发送到控件。因此,要实现您想要的目标,您必须为这些事件ScrollMouseWheel注册处理程序:

private void HandleScroll(){
    if (mypanel.HorizontalScroll.Value > 500) {
        lbl1.Text = "A";
    }
    else if (mypanel.HorizontalScroll.Value < 300) {
        lbl1.Text = "B";
    }
}
//place this code in your form constructor after InitializeComponent()
panel1.Scroll += (s,e) => {
   HandleScroll();
};
panel1.MouseWheel += (s,e) => {  
   HandleScroll();
};

答案 1 :(得分:0)

代码看起来没问题,但是当鼠标滚轮转动时它是否被调用?即代码是否附加到MouseWheel事件? 控制焦点触发事件可能也存在问题,特别是对于面板。