3

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

如果我使用鼠标滚轮滚动面板,它将不起作用。

这是我的代码:

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

1 回答 1

3

Scroll不同MouseWheel。当您滚动时,这意味着您必须使用ScrollBar来滚动它,消息WM_HSCROLL并将WM_VSCROLL被发送到控件。当您使用时,Mouse您还可以滚动以有 1 个子控件为焦点的条件scrollable container like Panel,消息WM_MOUSEWHEEL将被发送到该控件。因此,要实现您想要的,您必须为这两个事件注册处理程序,Scroll如下MouseWheel所示:

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();
};
于 2013-10-26T08:32:58.547 回答