2011-04-06 131 views
8

當設置VerticalScroll.ValuePanel,AutoScroll設置爲true時,滾動位置相應地改變,但拇指的位置不改變。我需要以某種方式更新滾動條(面板上的Invalidate(true)不起作用)?有任何想法嗎?滾動條在更改滾動值時不更新

回答

24

嘗試調用.PerformLayout();

+2

作品。非常感謝。 – EricSchaefer 2011-04-06 11:51:14

+0

是的,可以確認,這對我來說在3種不同的控制方面完美無瑕。謝謝。 – Rob 2012-03-25 22:52:05

+0

偉大的解決方案。 – 2016-11-17 06:47:37

6

感謝.PerformLayout()小費!

這對我來說還不夠,我在表單Form.Shown事件處理程序中設置了VerticalScroll.Value,出於某種原因,我必須事先添加一條DoEvents指令來使滾動工作。

這裏是我的Shown事件處理程序:

Private Sub MyForm_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown 
    System.Windows.Forms.Application.DoEvents() 

    ScrollPanel.VerticalScroll.Value = ScrollPanel.VerticalScroll.Maximum 
    ScrollPanel.PerformLayout() 
End Sub 

ScrollPanel控制System.Windows.Forms.Panel類型。

沒有Application.DoEvents()行,垂直滾動值設置完全被忽略。

我認爲這可能會派上用場。

0

當試圖自動滾動包含圖片框的面板時,我遇到了完全相同的問題。

我發現了另一種方法使其工作。增量滾動值的兩倍:

ScrollPanel.VerticalScroll.Value += AmountToScroll 

ScrollPanel.VerticalScroll.Value += AmountToScroll 

遞增首次使圖片框到面板中滾動的價值,但.value的不會改變,大拇指不動。

第二次增加值會導致VerticalScroll.Value增加,移動拇指,但圖片框不會再次滾動。

看起來像一個bug給我。當然,圖片框的滾動和拇指的增加以及拇指的移動都應該在第一行代碼之後發生。

0

我跑進東西幾乎相同,其中我有一個圖片(示出的曲線圖)與滾動條在面板內部,我想或縮小保持鼠標指針位置「顯然是」靜止的放大。將PictureBox重新放置在面板內部以執行此操作將拋出與滾動條的同步,此後,使用滾動條滾動將不會顯示PictureBox的全部區域。解決方案是通過將計算值分配給panel.Horizo​​ntalScroll.Value和/或panel.VerticalScroll.Value屬性來完成移動。但是,僅僅是不夠的:這兩個解決方案之一是需要使應用程序表現爲設計:

  1. KMan的解決方案上面:

    panel.HorizontalScroll.Value = computed_value 
    panel.PerformLayout() 
    
  2. 還是上面JJMcLellan的解決方案:在我的情況,分配計算值兩次,例如:

    panel.HorizontalScroll.Value = computed_value 
    panel.HorizontalScroll.Value = computed_value 
    

任一這些出現的一個爲具有相同的最終結果。因爲#2以上使得它看起來像一個bug,並且#1看起來(有希望)是由微軟設計的(?),所以我最終在我的應用程序中使用了#1。我只想確認這些工作在VB.NET環境中。