2013-10-26 71 views
2

我試圖讓面板上的滾動條位置,但它可以工作,如果我通過單擊並拖動scroolbar或單擊其滾動按鈕來滾動它。如何獲得面板上的滾動條位置? WinForms C#

如果我用鼠標滾輪滾動面板不起作用。

這裏是我的代碼:

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

鼠標滾輪垂直滾動,而不是水平。你的顯示器摔倒了嗎? –

+0

實際上,在我的應用程序中,它水平滾動,因爲我沒有垂直滾動條。 我該怎麼做你說的? – user2558874

回答

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(); 
}; 
+0

它沒有工作。問題是,當我使用鼠標滾輪滾動時,Horizo​​ntalScroll.Value不會'更新。 – user2558874

+0

@ user2558874我測試過它,它適用於我,你應該說*它不適合我*,確保出現'Horizo​​ntal ScrollBar'。當內容水平堆疊時會發生這種情況。 –

+0

對不起,你是對的。我犯了一個可怕的錯誤,我忘了爲我的面板名稱更改「panel1」。 – user2558874

0

的代碼看起來不錯,但是當鼠標滾輪被打開時它被稱爲?即代碼是否附加到MouseWheel事件? 觸發事件的控件焦點也可能存在問題,特別是對於面板。

+0

我在mypanel_Scroll中使用它,但是當我使用滾輪滾動面板時,Horizo​​ntalScroll.Value不會更新。 – user2558874

相關問題