C# 3D 图表






4.72/5 (52投票s)
2005 年 10 月 4 日
2分钟阅读

223291

9913
一篇简单的关于图表的文章。
引言
首先,我想特别感谢 CodeProject 提供了如此多有用的示例,并特别感谢本文的作者:自定义 .NET Panel 控件。
背景
如果您了解 EBP 产品,那么您会记得它们的主板上有一个简单但很酷的等距 3D 图表。所以,让我们在这里做同样的事情。所有代码都已在 Microsoft FxCop 1.35 下验证过。
即使是用法语,我也不太擅长写文章,所以英语就更差了 ;p。
使用代码
让我们看看创建代码
// Object declaration
Nolme.WinForms.Chart m_chartSample1;
// Create object
this.m_chartSample1 = new Nolme.WinForms.Chart(this.components);
this.m_chartSample1.BackColor = System.Drawing.Color.Silver;
this.m_chartSample1.BottomMargin = 20;
this.m_chartSample1.ColumnFont = new System.Drawing.Font(
"Arial", 8F, System.Drawing.FontStyle.Italic);
this.m_chartSample1.ColumnTitleFont = new System.Drawing.Font(
"Arial", 10F, System.Drawing.FontStyle.Underline);
this.m_chartSample1.Curvature = 15;
this.m_chartSample1.DeltaDepth = 10;
this.m_chartSample1.DisplayHiddenSides = true;
this.m_chartSample1.DisplayTextOnColumns = true;
this.m_chartSample1.GradientMode =
System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.m_chartSample1.LeftMargin = 50;
this.m_chartSample1.LegendFont = new System.Drawing.Font(
"Arial", 11F, System.Drawing.FontStyle.Bold);
this.m_chartSample1.Location = new System.Drawing.Point(8, 8);
this.m_chartSample1.MainTitle = "Main title";
this.m_chartSample1.MainTitleFont = new System.Drawing.Font(
"Arial", 16F,
((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold |
System.Drawing.FontStyle.Underline))));
this.m_chartSample1.MarginBetweenColumn = 20;
this.m_chartSample1.Name = "m_chartSample1";
this.m_chartSample1.RightMargin = 20;
this.m_chartSample1.Size = new System.Drawing.Size(456, 304);
this.m_chartSample1.TabIndex = 4;
this.m_chartSample1.TopMargin = 20;
this.m_chartSample1.VerticalAxisMaxValue = 10000;
this.m_chartSample1.VerticalAxisStep = 1000;
使用以下代码将列添加到图表
ChartColumn column1 =
m_chartSample1.AddColumn (1500, 210, 0, 500);
每个数字代表新列中的一个子值。如果您有更多值,则可以传递一个整数数组。
您可以这样设置列标题
column1.Title = "January";
其他属性,如边距、主标题等,都可以更改。
图表的图例有两种选择。 我们可以将图例集成到当前面板中,或者创建一个独立的图例对象。 主要目的是如果在同一页面上使用多个图表,则提供集中的唯一图例。
总而言之,Chart
(派生自CustomPanel
)包含一个或多个CharColumn
。 ChartLegend
由CharLegendItem
组成。 CharLegendItem
的数量与CharColumn
中的子值一样多。
关注点
我试图使代码尽可能简单,以便任何人都可以升级它。
Bug 报告
实际上什么也没有。
历史
- 2006-04-08
- 感谢 timbits214,已完成更改。
- 所以,我添加了一种新的“实时”渲染模式。
- Chart.cs 有一个新的方法
ShiftLeft
,用于将列从一步移动到左边。 - 通过这些更改,
ChartColumn
集成了一个默认构造函数和ResetValues
。
- 2006-03-31
- 新版本包含一种新的渲染模式:带有渐变的 3D。
- Bug 修复:左侧网格文本从 0 开始。
- Bug 修复:当最小值和最大值的数字位数不同时(例如 100 和 1000),垂直轴会自动调整。
- Bug 修复:边框绘制和优化。
- Bug 修复:带有负值的列上的标签。
- 新功能:ChartColumn.cs 中的
DisplayBorders
。 - 对函数参数列表进行了一些更改,以支持渐变绘制模式。
- 2005-10-07
- 新版本包含一种新的渲染模式。 请参阅
ChartRenderingMode enum
。 - 与此新模式相关联,
ChartCumulativeMode enum
可以定义列上标签的放置位置。 - 对函数参数列表进行了一些更改。
- 新版本包含一种新的渲染模式。 请参阅
- 2005-10-08
- 现在可以管理负值了。
- 已审查函数
AdjustVerticalAxis
。