2015-11-03 39 views
0

我有一個FlowLayoutPanel,它包含自頂向下包含的控件,然後從左到右,這樣通常它從不具有垂直滾動條,只是一個水平滾動條。所以當你使用鼠標滾輪時,它會水平滾動。大。有沒有什麼辦法可以設置Winforms面板滾動而不是垂直滾動鼠標滾輪?

直到用戶增長一個比屏幕更高的控件...然後它必須有一個垂直滾動條。精細。但是一旦出現垂直滾動條,鼠標滾輪輸入就開始垂直滾動。壞。

那麼,有什麼辦法可以告訴FlowLayoutPanel或滾動條鼠標滾輪應該總是水平的嗎? 或者告訴它先去水平線,然後再去垂直,如果沒有水平的話?

回答

0

由於厭惡的很好的建議,我也被標記爲一個答案,我選擇了簡單地檢測其中兩個滾動條上的情況下在這種情況下暫時關閉VScroll,同時調用基類的方法。

爲什麼?因爲考慮到你指出的代碼的評論,所以我擔心NOT調用基類方法的後果......這顯然很重要。

我沒有看到這個解決方案有任何閃爍或其他不好的後果,但請讓我知道是否有我應該考慮的缺點。

protected override void OnMouseWheel(MouseEventArgs e) 
    { 
     if (this.PreferHorizontalScroll && this.VScroll && this.HScroll) 
     { 
      this.VScroll = false; 
      base.OnMouseWheel(e); 
      this.VScroll = true; 
     } 
     else 
     { 
      base.OnMouseWheel(e); 
     } 
    } 
1

子類FlowLayoutPanel並覆蓋OnMouseWheel方法。不要撥打base方法。複製和代碼的下半部分貼從此方法:

http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/ScrollableControl.cs,c3f702621158871b

+0

感謝您的建議。看着你指給我的代碼,我看到了對base.OnMouseWheel(e)調用的評論,這似乎暗示重要的是這被稱爲last ...所以,不要稱它聽起來很可怕。另外我討厭將基本代碼複製到派生類中。但是,基於這個建議,我制定了一個替代答案,下面貼出來。謝謝!!! –

相關問題