我从ScrollableControl
派生了这个UserControl
,我只想显示一个垂直滚动条。因为无论如何我都不能配置为只显示垂直滚动条。这似乎是winforms的一个缺陷。另一个问题是,每当父控件调整大小时,使控件变窄,水平滚动条会立即显示,直到OnResize
事件处理程序调整宽度为止。因此,水平滚动条会闪烁,因为它的内容暂时比可滚动控件的宽度宽。2这使得可滚动控件内的组件在调整到可用空间时进行不必要的重绘。3当控件变宽时,则从不显示水平滚动条。
所以我在谷歌上搜索了一下,发现了这个:在.NET中向面板添加垂直滚动条
看起来是在升级,但是现在无论是滚动条还是面板的内容,只要被这个 * 外部 * 滚动条滚动就会闪烁。调整面板的大小使其宽度变小,显示和隐藏水平滚动条,以及导致不必要的重画的问题都不再存在了,所以这是一个胜利。
控件的建构函式如下所示:
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个滚动条!)是疯狂的。
有没有办法让屏幕上只有一个滚动条(总是),而其他滚动条或滚动条的内容不闪烁?
2条答案
按热度按时间goqiplq21#
MajinFro的回答实际上帮了我的忙:During FlowLayoutPanel scrolling, background distorts + flickers
当我没有按照建议覆盖CreateParams时,它就不起作用,所以这看起来确实像是一个基本的“技巧”。
kb5ga3dv2#
在面板滚动事件上设置此代码: