Pocket PC 的简单条形图
为 Pocket PC 应用程序生成一个简单的条形图。
引言
我最近需要为 Pocket PC 应用程序生成一个条形图。网上有很多关于这个问题的资料,文章、免费软件等等,但我找不到任何适用于紧凑框架的东西。
有时作为一名开发人员,我会想为什么花费这么长时间来解决一些别人已经完成的事情?好吧,这次不是这样,所以我决定自己解决这个问题。
使用代码
本文中发布的应用程序包含一个用 C# 编写的紧凑型 Windows Forms 项目,其中包含一个没有任何控件的单个窗体。它在 PocketBarGraph
组件的 Load
事件中获取并填充虚拟数据,如下所示。其余的通过组件和该窗体的 Paint
事件完成。这里的技巧是将窗体 Paint
事件的参数 System.Windows.Forms.PaintEventArgs
发送到 graphMotor
private GraphMotor graph;
private void Data_Load(object sender, System.EventArgs e)
{
//A new motor
graph = new GraphMotor();
//I add two series of data
graph.Graphs.Add(new ListData());
graph.Graphs.Add(new ListData());
//Set the color for each one
graph.Graphs[0].DisplayColor = Color.DarkBlue;
graph.Graphs[1].DisplayColor = Color.DarkGreen;
PocketGraphBar.GraphPoint p;
//Generate de dumy data
for(int i = 1; i < 11; i++)
{
//A new point
p = new PocketGraphBar.GraphPoint();
p.X = Convert.ToDecimal(i);
p.Y = Convert.ToDecimal(i * 100);
graph.Graphs[0].Add(p);
//Another new point
p = new PocketGraphBar.GraphPoint();
p.X = Convert.ToDecimal(i);
p.Y = Convert.ToDecimal(i * 50);
graph.Graphs[1].Add(p);
}
}
private void Data_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
try
{
//In the load event the the object was filled
//Here we only set its properties
graph.LeftMargin = 20;
graph.LegendFont = new System.Drawing.Font("Arial",
8.25F, System.Drawing.FontStyle.Regular);
graph.AxisColor = Color.Black;
graph.MaxHeight = 200;
//The width of each bar
graph.Thick = 6;
//The number of bars wa want to see
//for each series of data
graph.DisplayTimes = 10;
//Now solve this
graph.DrawGraphs(e);
}
catch(Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
关于组件,我们有三个类
GraphMotor
:是解析所有逻辑的控制器类。ListGraphs
:是我们想要绘制的一系列数据的集合。这意味着我们可以拥有一个复合条形图。ListData
:是我们想要绘制的数据的集合。GraphPoint
:一个单一的键值对,X 和 Y,其中 Y 取决于 X 的值。
这些类的命名空间是 PocketGraphBar
。
关注点
- 我已经在
GraphPoint
中使用了decimal
类型,以便使用简单的转换或Convert
放入任何类型的值。 - 每个条形的高度由 value / maxValue * maxLength 确定,所以即使您需要绘制 N 位数的数值,也会进行缩放。
- 由于
ListData
和ListGraphs
类实现了System.Collections.ICollection
,因此可以放置任意数量的 N 个键值对数据系列。 - 它应该可以很好地用于常见的 Windows Forms 应用程序。
请记住,外观和感觉取决于您输入的数据逻辑,该设计用于智能设备应用程序,所以不要期望太多。条形图由 X 和 Y 值的集合组成,其中 X 是连续的(1,2,3,4... 或 2005, 2010, 2015...)。
我认为这可以作为交付更多类型的图表(饼图、线性图、面积图)的基础,但这项工作只是在一个下午完成的。