using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace DrawChart
{
public partial class DrawChart : UserControl
{
#region 构造函数
public DrawChart()
{
InitializeComponent();
DrawBackGround();
}
#endregion
#region 相关属性设置
private string strTitleName = "";
/// <summary>
/// 设置直方图名称
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置直方图名称")]
public string My_TitleName
{
get { return strTitleName; }
set
{
strTitleName = value;
lblTitle.Text = strTitleName;
}
}
private int colorDesign = 0;
/// <summary>
/// 设置设计直方图背景色
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置静态设计直方图背景色")]
public int My_DesignColor
{
get { return colorDesign; }
set
{
colorDesign = value;
DrawBackGround();
}
}
private int colorActual = 0;
/// <summary>
/// 绘图颜色
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("设置实际作图直方图背景色")]
public int My_ActualColor
{
get { return colorActual; }
set
{
colorActual = value;
}
}
private bool bolUp = true;
/// <summary>
/// 绘制直方图模式 true 防沙模式;false 酸化模式
/// </summary>
[Bindable(true), Category("基础信息属性设置"), DefaultValue(""), Description("绘制直方图模式 true 防沙模式;false 酸化模式")]
public bool My_DrawChartWithUp
{
get { return bolUp; }
set
{
bolUp = value;
}
}
#endregion
#region 作图属性
private float fltDesignData = 0F;
/// <summary>
/// 设置设计值
/// </summary>
[Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置设计值")]
public float My_DesignData
{
get { return fltDesignData; }
set
{
fltDesignData = value;
lblDesign.Text = "设计:"+fltDesignData.ToString();
}
}
private float fltActualData = 0F;
/// <summary>
/// 设置实际值
/// </summary>
[Bindable(true), Category("作图属性"), DefaultValue(""), Description("设置实际值")]
public float My_ActualData
{
get { return fltActualData; }
set
{
fltActualData = value;
if (bolUp)
{
SetRealTimeData(fltActualData.ToString());
DrawRealTimeChart(GetRectF(fltActualData));
}
else
{
if (fltActualData < fltDesignData)
{
SetRealTimeData(Convert.ToString((fltDesignData - fltActualData)));
DrawRealTimeChart(GetRectF(fltDesignData - fltActualData));
}
else
{
SetRealTimeData("0");
}
}
}
}
#endregion
#region 私有变量
private Color colorFrame = Color.Cyan;//边框颜色 默认
private delegate void SetImageToPnl(Image img1);//委托方法
private delegate void SetRealData(string strRealTimeData);//设置实时数据
#endregion
#region 私有方法
#region 初始化背景图片
private void DrawBackGround()
{
Image img = new Bitmap(pnlChart.Width, pnlChart.Height);
using (Graphics g =Graphics.FromImage(img))
{
//画矩形
g.DrawRectangle(new Pen(Brushes.Cyan,1.9F), new Rectangle(2, 2, (pnlChart.Width - 4) / 2, pnlChart.Height - 6));
//填充矩形
SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorDesign));
g.FillRectangle(bh, new Rectangle(3, 3, (pnlChart.Width - 4) / 2 - 2, pnlChart.Height - 7));
//画边框
g.DrawLine(new Pen(Brushes.Cyan, 1.9F), new Point((pnlChart.Width - 4) / 2 + 2, pnlChart.Height - 4), new Point(pnlChart.Width - 4, pnlChart.Height - 4));
g.Dispose();
}
SetBackGroundImage(img);
}
#endregion
#region 重绘
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
DrawRealTimeChart(GetRectF(fltActualData));
}
#endregion
#region 实时绘制柱状图
private void DrawRealTimeChart(RectangleF rtf)
{
try
{
using (Graphics g = pnlChart.CreateGraphics())
{
SolidBrush bh = new SolidBrush(ColorTranslator.FromOle(colorActual));
SolidBrush bhWithe = new SolidBrush(Color.White);
g.FillRectangle(bhWithe, new RectangleF((float)(pnlChart.Width - 4) / 2 + 2, 4, (float)(pnlChart.Width - 4) / 2, (float)(pnlChart.Height - 8)));
g.FillRectangle(bh, rtf);
g.Dispose();
}
}
catch
{ }
}
#endregion
#region 计算填充矩形
private RectangleF GetRectF(float fltData)
{
RectangleF rtf = new RectangleF();
float fltTemp = (pnlChart.Height - 8) / fltDesignData;
if (fltActualData <= 0)
{
rtf = new RectangleF(0F, 0F, 0F, 0F);
}
else if (fltActualData > 0 && fltActualData < fltDesignData)
{
rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, (float)(pnlChart.Height - 4 - fltData * fltTemp), (float)(pnlChart.Width - 4) / 2-2,fltTemp*fltData-0.8F);
}
else if (fltActualData > fltDesignData)
{
rtf = new RectangleF((float)(pnlChart.Width - 4) / 2+2, 4, (float)(pnlChart.Width - 4) / 2-2, (float)(pnlChart.Height - 8.8F));
}
return rtf;
}
#endregion
#region 托管方法
private void SetBackGroundImage(Image img)
{
if (pnlChart.InvokeRequired)
{
SetImageToPnl stp = new SetImageToPnl(SetBackGroundImage);
Invoke(stp, new object[] { img });
}
else
pnlChart.BackgroundImage = img;
}
private void SetRealTimeData(string str)
{
if (lblActual.InvokeRequired)
{
SetRealData stp = new SetRealData(SetRealTimeData);
Invoke(stp, new object[] { str });
}
else
lblActual.Text = "Actual:"+str;
}
#endregion
#endregion
#region 私有事件 绘图区域Size改变时 触发重绘事件
private void pnlChart_SizeChanged(object sender, EventArgs e)
{
DrawBackGround();
}
#endregion
#region 当绘图区域失去焦点时 触发重绘事件
private void pnlChart_Paint(object sender, PaintEventArgs e)
{
DrawRealTimeChart(GetRectF(fltActualData));
}
#endregion
}
}
分享到:
相关推荐
这个是配合SPC质量分析一块用的,单独用也没问题,可以传入相应需要绘图的数据点,就能画出图形 注:使用时需要先建一个image图片,指定图片路径,绘图时图片路径与image中指定图片路径一致就能在网页中显示图形。...
本实例通过使用webchart来实现直方图及饼图,开发环境VS2005直接运行即可
平时我们只对一组数据做直方图统计,这样我们只要直接画直方图就可以了。 但有时候我们同时画多组数据的直方图(比如说我大一到大四跑大学城内环的用时的分布),大一到大四用不同颜色的直方图,显示在一张图上,...
31.7 直方图 31.8 饼图 31.9 阶梯图、散点图、针状图 31.10 填充图、对数图、热图 31.11 函数绘图 31.12 极坐标绘图 31.13 坐标刻度和标签 31.14 极坐标刻度和标签 31.15 多边形绘图 31.16 曲面图汇总 31.17 三维图...
python flask学生成绩管理系统。... ■ 统计各分数段学生的成绩分布, 画出直方图和饼图。 ○ 录入 ■ 学生所选课程成绩 ○ 修改 ■ 学生所选课程成绩 ○ 删除 ■ 学生所选课程成绩 详细介绍和导入教程如下: ...
在所实现的21种功能中,既有较初级的灰度变换、伽马校正、均值滤波、中值滤波、直方图均衡化、彩色负片等,有稍高级的Gauss滤波、Butterworth滤波,也有更复杂的Ostu二值化,生成油画,生成素描等。上述所有的功能都...
查看图像属性,直方图和统计信息 颜色,通道和HSL过滤 亮度,对比度和饱和度调整 伽玛校正和色调修改 模糊和锐化 应用油画,佩林噪声,抖动和像素画等效果 剪切,复制和粘贴图像 撤消功能 拖放功能 支持常见的图像...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...
服务器可以将收集到的信息以柱状图和文件列表以及其他方式呈现给用户,以便用户对局域网内的主机进行监测和管理。 CClockST_demo 电子钟的实现,自绘Button、Static的实现,其中自定了一个辅助主题风格类。 ...