27.1.5 示例--使用图表控件来两个年度的销售额
下面介绍使用MSChart控件来进行图表报表的示例,在本示例中以图表样式来显示两个年度的销售额,本示例中所示的销售额是虚拟的。本示例运行结果如图27-1所示。
要实现如图27-1所示的效果。其操作步骤如下:
(1)新建一个工程,工程名为"MSChart控件示例"。在窗体上添加1个MSChart控件、1个Command按钮、1个Combo控件、1个Label控件。
(2)调整窗体上各个控件对象的大小和位置,将窗体上的Label1的Caption属性设为"图表类型"、Command1的Caption属性设为"显示"。其窗体界面设计如图27-1所示。
(3)双击窗体,在其打开的代码窗体中添加如下代码。
在窗体加载时需要向窗体上ComBox控件中添加所有可显示图表的类型。窗体加载事件过程的代码如下:
(点击查看大图)图27-1 MSChart控件示例 |
- Option Explicit
- Private Sub Form_Load() '加载窗体
- MSChart1.Visible = False '图表控件不可见
- Combo1.AddItem "3D条形图" '向Combo控件中添加图表的类型
- Combo1.AddItem "2D条形图"
- Combo1.AddItem "3D折线图"
- Combo1.AddItem "3D面积图"
- Combo1.AddItem "2D面积图"
- Combo1.AddItem "3D面积图"
- Combo1.AddItem "3D组合图"
- Combo1.AddItem "2D组合图"
- Combo1.AddItem "2D饼图"
- Combo1.AddItem "2D XY 散点图"
- End Sub
在改变窗体上的ComBox控件图表显示的类型时,需要在改变图表类型的同时其显示的图表也做相应的改变。这个需要在ComBox控件的单击事件中完成。ComBox控件单击事件过程中的代码如下:
- Private Sub Combo1_Click() '选择图表类型时
- Select Case Combo1.ListIndex '判断所选择的图表类型的索引号
- Case 0 '根据索引号给MSChart1的
- chartType属性赋相应的值
- MSChart1.chartType = VtChChartType3dBar '3D条形图
- Case 1
- MSChart1.chartType = VtChChartType2dBar '2D条形图
- Case 2
- MSChart1.chartType = VtChChartType3dLine '3D折线图
- Case 3
- MSChart1.chartType = VtChChartType2dLine '2D折线图
- Case 4
- MSChart1.chartType = VtChChartType3dArea '3D面积图
- Case 5
- MSChart1.chartType = VtChChartType2dArea '2D面积图
- Case 6
- MSChart1.chartType = VtChChartType3dStep '3D阶梯图
- Case 7
- MSChart1.chartType = VtChChartType2dStep '2D阶梯图
- Case 8
- MSChart1.chartType = VtChChartType3dCombination '3D组合图
- Case 9
- MSChart1.chartType = VtChChartType2dCombination '2D组合图
- Case 10
- MSChart1.chartType = VtChChartType2dPie '2D饼图
- Case 11
- MSChart1.chartType = VtChChartType2dXY '2D XY 散点图
- End Select
- End Sub
窗体"显示"按钮主要用将数据按照图形的方式在窗体显示出来。在显示图表之前需要对显示的数据进行赋值后才能进行图表的显示。窗体"显示"按钮单击事件过程下的代码如下:
- Private Sub Command1_Click() '显示按钮
- Dim Li_i As Integer '定义一个变量用做循环变量
- Dim Li_j As Integer
- Dim Li_YearArray(2) As Integer '声明一个数组用于存入年份的值
- Dim Li_DataArray(2, 12) '声明一个二维数组。用于
存储每个月的销售额- Dim FirstTime As Boolean '用于标识是否为第
一次显示。如为第一次显示则- True
- MSChart1.Visible = True '图表控件显示在窗体上
- FirstTime = True '赋值为True
- Li_YearArray(1) =2006 '赋年份的值
- Li_YearArray(2) =2007
- Li_DataArray(1, 1) = 120 '给2006年中的每个月份赋一个销售额
- Li_DataArray(1, 2) = 80
- Li_DataArray(1, 3) = 45.3
- Li_DataArray(1, 4) = 10.4
- Li_DataArray(1, 5) = 46.6
- Li_DataArray(1, 6) = 189
- Li_DataArray(1, 7) = 182.45
- Li_DataArray(1, 8) = 142
- Li_DataArray(1, 9) = 125
- Li_DataArray(1, 10) = 95.99
- Li_DataArray(1, 11) = 64.32
- Li_DataArray(1, 12) = 16.1 '2006年第12月的销售额为16.1
- Li_DataArray(2, 1) = 45.63 '给2007年中的每个月份赋一个销售额
- Li_DataArray(2, 2) = 124.66
- Li_DataArray(2, 3) = 140
- Li_DataArray(2, 4) = 201
- Li_DataArray(2, 5) = 40
- Li_DataArray(2, 6) = 88.2
- Li_DataArray(2, 7) = 43.5
- Li_DataArray(2, 8) = 68.4
- Li_DataArray(2, 9) = 75.2
- Li_DataArray(2, 10) = 175.22
- Li_DataArray(2, 11) = 4.2
- Li_DataArray(2, 12) = 73.86 '2007年第12月的销售额为73.86
- MSChart1.chartType = VtChChartType2dBar '设
置MSChart1的图表类型- MSChart1.ColumnCount = 12 '设置
图表中的总的列数- For Li_i = 1 To 2 '将循环每个年份
- MSChart1.RowCount = Li_i '图表的总行数
- For Li_j = 1 To 12 '将数组中的每个月份
的值显示在图表中- MSChart1.Column = Li_j '当前列数
- MSChart1.Row = Li_i '当前行
- MSChart1.Data = Li_DataArray(Li_i, Li_j)
'当前数据点的值- MSChart1.RowLabel = Li_YearArray(Li_i) & "年"'当前行标签
- If FirstTime Then '判断是否为第一
次加载,如果是第一次则打- 印每一列的标签
- MSChart1.ColumnLabelIndex = Li_i
- MSChart1.Column = Li_j '当前列的索引
- Select Case Li_j '根据值来打印相应列的标签
- Case 1
- MSChart1.ColumnLabel = "一月" '一月
- Case 2
- MSChart1.ColumnLabel = "二月" '二月
- Case 3
- MSChart1.ColumnLabel = "三月" '三月
- Case 4
- MSChart1.ColumnLabel = "四月" '四月
- Case 5
- MSChart1.ColumnLabel = "五月" '五月
- Case 6
- MSChart1.ColumnLabel = "六月" '六月
- Case 7
- MSChart1.ColumnLabel = "七月" '七月
- Case 8
- MSChart1.ColumnLabel = "八月" '八月
- Case 9
- MSChart1.ColumnLabel = "九月" '九月
- Case 10
- MSChart1.ColumnLabel = "十月" '十月
- Case 11
- MSChart1.ColumnLabel = "十一月" '十一月
- Case 12
- MSChart1.ColumnLabel = "十二月" '十二月
- End Select
- End If
- Next
- FirstTime = False '第一次循环完成后,
值设为False- Next
- MSChart1.TitleText = "2006、2007年度销售额(单位:万元)" '设
置图标的标题- MSChart1.Title.VtFont.Size = 15 '标题的大小
- MSChart1.Title.VtFont.VtColor.Set 255, 0, 0 '标题的颜色
- MSChart1.Title.TextLayout.HorzAlignment =
VtHorizontalAlignmentCenter- '标题文本的对齐方式
- '设置图标的脚注信息,这里没
有计算月平均销售额- MSChart1.Footnote.Text = "说明:最高销售额为201万元、最低销售额为4.2万元、
- 平均销售额为XX万元"
- MSChart1.Footnote.VtFont.Size = 12 '脚注的大小
- MSChart1.Footnote.VtFont.VtColor.Set 255, 0, 0 '脚注的颜色
- MSChart1.Footnote.TextLayout.HorzAlignment =
VtHorizontalAlignmentRight
'脚注文本的对齐方式- MSChart1.ShowLegend = True '显示图例
- End Sub
运行程序,其运行效果如图27-1所示。在窗体上单击"显示"按钮,程序就会把Li_DataArray数组中的值在MSChart1中以图表的方式显示出来。可以通过选择图表类型列表中的图表名称来改变图表显示的方式。在本示例中图表中显示的数据是静态(虚拟的),如果要在图表中显示数据库中的数据则与本示例差不多唯一不同的是在显示图表之前,要将数据库的数据赋给对应数组,有兴趣的读者可以自己实现下。