我從得到這UserControl
,我只希望顯示一個垂直滾動條。無論如何,我決不能配置爲僅顯示垂直滾動條。這似乎是winforms的缺陷。另一個問題是,只要父級調整大小,使控制變得更小,水平滾動條就會立即顯示,直到OnResize
事件處理程序調整寬度。因此,水平滾動條閃爍,因爲它的內容比滾動條控件的寬度更寬。這會使可滾動控件內的組件重新繪製不必要的時間,因爲它們會調整到可用空間。當控制變寬時,水平滾動條從不顯示。ScrollableControl中的閃爍滾動條
所以我用Google搜索了一圈,發現這樣的:Add vertical scroll bar to panel in .NET
似乎promosing,但現在這兩個滾動條和麪板的內容,只要它是由這個外部滾動條滾動的閃爍。調整面板寬度變小,顯示和隱藏水平滾動條,並導致不必要的重繪的問題不在此列,因此這是一場勝利。
這是控制的構造是這樣的:
public BarGraphPanel()
{
this.HScroll = false;
this.VScroll = false;
this.AutoScroll = false;
this.VerticalScroll.Visible = false;
this.HorizontalScroll.Visible = false;
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.DoubleBuffered = true;
}
它應該看起來像在滾動什麼:
它看起來像什麼,而滾動:
雖然滾動是我可以接受的東西,但是文本框沒有被很好地繪製,但是兩個滾動條閃爍(所以暫時顯示實際上3個滾動條!)是瘋狂的。
有沒有一種方法只有一個滾動條在屏幕上(總是)沒有任何其他酒吧或其內容閃爍?
至於閃爍,這不是令人耳目一新。 UserControl上的一個良好的'Invalidate()'應該做到這一點。 – DonBoitnott
不要使用該垂直滾動條。只需設置面板的AutoScrollMinSize即可獲取滾動條。 – LarsTech
@DonBoitnott這似乎不夠。雖然在中午之後苦苦掙扎,我終於找到了答案:http://stackoverflow.com/questions/3341032/during-flowlayoutpanel-scrolling-background-distorts-flickers –