C# 如何正确使用图形
除了标准图形,我正在尝试使用更高级的图形。 我的一次尝试是创建一些有用的控件-一个旋钮。 我有一个图像包含100个值为1-100的旋钮,在项目中我将其拆分为一个位图数组包含每个值(1-100)的位图 这是旋钮的外观,对于某些值,可以通过按住鼠标并向上/向下拖动来更改该值 我的技术是,每当值改变时,旋钮的BackgroundImage属性(作为控制对象)将更改为位图数组中“值”索引中的图像。这意味着如果我有位图数组X,值V和旋钮K,那么C# 如何正确使用图形,c#,.net,graphics,C#,.net,Graphics,除了标准图形,我正在尝试使用更高级的图形。 我的一次尝试是创建一些有用的控件-一个旋钮。 我有一个图像包含100个值为1-100的旋钮,在项目中我将其拆分为一个位图数组包含每个值(1-100)的位图 这是旋钮的外观,对于某些值,可以通过按住鼠标并向上/向下拖动来更改该值 我的技术是,每当值改变时,旋钮的BackgroundImage属性(作为控制对象)将更改为位图数组中“值”索引中的图像。这意味着如果我有位图数组X,值V和旋钮K,那么K.BackgroundImage=X[V]。每次值更改都会
K.BackgroundImage=X[V]
。每次值更改都会重复此操作
问题在于:当我在运行时增加/减少该值时,旋钮在图像更改期间就像“闪烁”。这让我觉得我的技术不好,我想知道是否有更好的方法来做到这一点
*旋钮的设计不是我的,只是在互联网上找到的。我假设你有一个用户控件或某种控件派生的子类。如果你不这样做,就让它这样 当你在做这件事时,请阅读这篇精彩的文章: 总之,在
OnPaint
覆盖中执行绘制,并在构造函数中执行以下操作:
SetStyle(
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.OptimizedDoubleBuffer, true);
这应该可以修复您的闪烁。一些代码(特别是绘图代码)怎么样。什么环境?WinForms?WPF?银灯?ASP.NET?可能在控件的某个地方有一个后台缓冲区设置。Metro?WinForms?WPF?银灯?Windows Phone?ASP.Net?MonoTouch?你需要双倍缓冲动画。是否真的需要100个子图像?非常确定GDI+可以旋转图像。可能重复