我正在尝试使用除标准图形之外的更高级的图形。 我的一个尝试是创造一些有用的控制 - 一个旋钮。 我有一个图像包含100个旋钮,值为1-100,在项目中我将其拆分为 位图数组 包含每个值的位图(1-100) )。
这是旋钮在某些值上的样子,可以通过按住鼠标并向上/向下拖动来改变该值。
我的技术是每当值发生变化时,Knob的BackgroundImage属性(一个Control对象)将被更改为位于bitmaps数组中'Value'索引中的图像。这意味着如果我有位图数组 X ,值 V 和旋钮 K ,那么K.BackgroundImage = X[V]
。每次更改值都会重复此操作。
问题是:当我在运行时增加/减少值时,旋钮在图像更改期间就像“闪烁”一样。这让我觉得我的技术不好,我想知道是否有更好的方法。
*旋钮的设计不是我的,只是通过互联网找到。
答案 0 :(得分:1)
我将假设你有一个UserControl或某种Control派生的子类。如果你不这样做,那就这样......
当你参与其中时,请阅读这篇了不起的文章:http://www.codeproject.com/Articles/12870/Don-t-Flicker-Double-Buffer
底线,在OnPaint
覆盖中执行绘画,并在构造函数中执行以下操作:
SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
这应该可以修复你的闪烁。