C#波形图控件制作示例程序
首先添加一个timer,50s
using system;
using system.collections.generic;
using system.componentmodel;
using system.drawing;
using system.data;
using system.text;
using system.windows.forms;
namespace high_tech_watch
{
public partial class usercontrol1 : usercontrol
{
public usercontrol1()
{
initializecomponent();
}
int[] oldline;
int size = 15; //方格的大小
pen linepen = new pen(color.fromargb(3,64, 129), 1); //背景线条颜色
pen forelinepen = new pen(color.lightblue); //前景线条颜色
private void usercontrol1_paint(object sender, painteventargs e)
{
graphics g = e.graphics;
int bvalue;
bvalue = value;
if (shake != 0)
{
random ro = new random();
int r = ro.next(0, shake);
value += (ro.next(-shake, 0) / 2) + r/2;
if (value>100)
{
value = 100;
}
if (value < 0)
{
value = 0;
}
}
int h = (int)(this.size.height / size);
int w = (int)(this.size.width / size )+ 1;//这里加1保证了滚动时最右侧垂直线及时出现
for (; h >= 0;h-- )
{
g.drawline(linepen, new point(0, h * size), new point(this.size.width, h * size));
}
for (; w>=0;w-- )
{
g.drawline(linepen, new point((w * size) - limits, 0), new point((w * size) - limits, this.size.height));
}
for (int i = oldline.length - 1,j = 0;i >j ;j++ )
{
g.drawline(forelinepen, new point(j,(this.height - (int)(((float)oldline[j] / (float)100) * (float)this.height) ) -1),
new point(j + 1, (this.height - (int)(((float)oldline[j+1] / (float)100) * (float)this.height))-1) );
}
for (int i = oldline.length - 1, j = 0; i > j; j++)
{
oldline[j] = oldline[j + 1];
}
oldline[oldline.length - 1] = value;
pintlightpoint(e);
value = bvalue;
}
private void pintlightpoint(painteventargs e)
{
graphics g = e.graphics;
g.drawimage(global::high_tech_watch.resource1.未标题_2,new rectangle(new point(this.width - 50,this.height - (int)(((float)lightpointvalue / (float)100) * (float)this.height ) - 10),new size(20,20)));
}
int lightpointvalue = 50;
int limits = 0;//滚动就靠他了,是一个范围
private void timer1_tick(object sender, eventargs e)
{
limits++;
if (limits >= size)
{
limits = 0;
}
this.invalidate();
}
private void usercontrol1_load(object sender, eventargs e)
{
oldline = new int[this.width - 40];
}
int shake = 0;
[defaultvalue(0),description("抖动率,值控件输入的值自动抖动(禁用是为0)"),category("属性值")]
public int shake
{
get{return shake;}
set{shake = value;}
}
[defaultvalue(0),description("当前数值"),category("属性值")]
public int value
{
get { return lightpointvalue; }
set { lightpointvalue = value; }
}
[description("当前数值"), category("属性值")]
public pen linepen
{
get { return linepen; }
set
{
linepen = value;
this.invalidate();
}
}
private void usercontrol1_resize(object sender, eventargs e)
{
if ((this.width - 40) > oldline.length)
{
int[] newarry = new int[this.width - 40];
oldline.copyto(newarry, newarry.length - oldline.length);
oldline = new int[this.width - 40];
oldline = newarry;
}
if ((this.width - 40) < oldline.length)
{
int[] newarry = new int[this.width - 40];
for (int i = newarry.length - 1,j = oldline.length - 1; i >=0 ;i--,j-- )
{
newarry[i] = oldline[j];
}
oldline = new int[this.width - 40];
oldline = newarry;
}
}
}
}
上一篇: java通过url读取文件内容示例