Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用图形_C#_.net_Graphics - Fatal编程技术网

C# 如何正确使用图形

C# 如何正确使用图形,c#,.net,graphics,C#,.net,Graphics,除了标准图形,我正在尝试使用更高级的图形。 我的一次尝试是创建一些有用的控件-一个旋钮。 我有一个图像包含100个值为1-100的旋钮,在项目中我将其拆分为一个位图数组包含每个值(1-100)的位图 这是旋钮的外观,对于某些值,可以通过按住鼠标并向上/向下拖动来更改该值 我的技术是,每当值改变时,旋钮的BackgroundImage属性(作为控制对象)将更改为位图数组中“值”索引中的图像。这意味着如果我有位图数组X,值V和旋钮K,那么K.BackgroundImage=X[V]。每次值更改都会

除了标准图形,我正在尝试使用更高级的图形。 我的一次尝试是创建一些有用的控件-一个旋钮。 我有一个图像包含100个值为1-100的旋钮,在项目中我将其拆分为一个位图数组包含每个值(1-100)的位图

这是旋钮的外观,对于某些值,可以通过按住鼠标并向上/向下拖动来更改该值

我的技术是,每当值改变时,旋钮的BackgroundImage属性(作为控制对象)将更改为位图数组中“值”索引中的图像。这意味着如果我有位图数组X,值V和旋钮K,那么
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+可以旋转图像。可能重复