图表控件--MSChart(1)

数据图表/报表技术

图表/报表是数据信息输出最常用的格式,在各类管理系统中具有重要的作用和地位。本章将通过数据报表设计器(Data Report Designer)、图表、直接编程打印、利用Microsoft Excel和Microsoft Word等设计多种格式的报表。这些报表格式是比较典型的报表形式,在实际开发中具有重要意义和作用。在本章中将介绍有图表/报表的知识。

27.1 图 表 技 术

在实际编程过程中,有时需要将查询统计出来的数据用以图表的形式显示出来。VB中提供了一个图表控件,使用该图表控件可以很方便地将数据以图表的形式显示统计出来。在本节中将介绍一些有关图表的知识。

27.1.1 图表控件概述

图表控件(MSChart)是可以按照一定的规范将数据以图表的形式绘制出来。其绘制的数据源可以是动态数据,也可以存储数据中数据库中的数据、电子表格的数据等存储介质的数据。可通过在控件的属性页中设置数据来创建图表,或者也可以从其他数据源为控件对象设置数据。MSChart控件主要支持真三维表示,支持所有主要的图表和图形类型。

由于MSChart控件不是标准控件,要使用MSChart控件必需要将MSChart控件添加到控件工具箱中。添加MSChart控件的方法为选择"工程"|"部件"命令,在出现的"部件"对话框中选择"Microsoft MSChart Controls 6.0(SP4)"选项并单击"确定"按钮。这时候MSChart控件就被添加到VB的控件工具箱中。

源文档 <http://book.51cto.com/art/201007/215047.htm>

    27.1.2 图表控件的基本属性(1)

    设置MSChart控件对象的名称、大小、图表的标题、图表的页眉、图表的脚注、图表的行列数等,可通过设置MSChart控件的一些属性来完成。MSChart控件的基本属性如表27-1所示。

    表27-1 MSChart控件的基本属性

    编号

    1

    ActiveSeriesCount

    根据MSChart控件对象中的列数与

    绘制的图表类型返回图表中显示的系列数

    2

    AllowDithering

    返回/设置一个数值,该数值决定是

    否禁止八位彩色显示器上,图表的颜

    色抖动,以便使用MSChart控件自身

    的彩色调色板来增强图表的显示

    续表

    编号

    3

    AllowDynamicRotation

    返回/设置一个数值,它指示是否在按下

    Ctrl键显示旋转光标之后就可交互式

    地旋转三维图表

    4

    AllowSelections

    返回/设置一个数值,它指示是否可以

    选择图表对象

    5

    AllowSeriesSelection

    返回/设置一个数值,它指出在单击单

    个的图表数据点时是否可选定整个系列

    6

    AutoIncrement

    返回/设置一个数值,它决定在输入数

    据期间,那些设置当前数据点的属性

    值是否能不用人工设置ColumnRow

    属性而自动递增

    7

    Backdrop

    返回对Backdrop对象的引用,它描述

    在图表或图表元素后面的阴影、图案或图片

    8

    BorderStyle

    返回/设置MSChart控件对象的边框样式

    9

    Chart3d

    返回一个数值,此数值指定MSChart

    控件对象中的图表是否为三维 图表

    10

    ChartData

    返回/设置一个数组,该数组包含将要被

    该图表显示的值

    11

    ChartType

    返回/设置用于显示图表的图表类型

    12

    Column

    返回/设置数据网格中当前的数据列

    13

    ColumnCount

    返回/设置与图表关联的当前数据网格中的列数

    14

    ColumnLabel

    返回/设置与图表数据网格中的列关联的标签文本

    15

    ColumnLabelCount

    返回/设置与图表关联的数据网格中的列的标签级别数

    16

    ColumnLabelIndex

    返回/设置与图表关联的特定列标签的级别

    17

    Container

    返回/设置Form上控件的容器

    18

    Data

    返回/设置被插入图表数据网格中的当前

    数据点的数值

    19

    DataBindings

    返回DataBindings集合对象,该对象包

    含了有用的可绑定属性

    20

    DataGrid

    返回DataGrid对象的引用,它描述与

    图表关联的数据网格

    21

    DataMember

    在数据提供程序提供的几个数据成员

    中,返回或者设置特定的一个

    22

    DataSource

    返回/设置一个数据源,通过该数据

    源将一个数据使用者绑定到一个数据库

    23

    DoSetCursor

    返回/设置一个数值,它指示图表是否能设置光标

    24

    DragIcon

    返回/设置一个图标,它表示在MSChart

    控件对象上进行拖放操作中将作为指针显示

    25

    DrawMode

    返回/设置一个数值,它决定什么

    时候以及如何重绘图表

    26

    Enabled

    返回/设置一个值,该值用来确定一个窗

    体或控件是否能够对用户产生的事件作出反应

    27

    Footnote

    返回对Footnote对象的引用,它提供关

    于注释图表所用的描述性文字信息

    28

    FootnoteText

    返回/设置用作脚注的文本

    29

    Height

    返回/设置MSChart控件对象的高度

    30

    HelpContextID

    返回或设置MSChart控件对象一个

    相关联上下文的编号

    31

    hWnd

    返回MSChart控件对象的句柄

    32

    Index

    返回/设置数,它唯一指定集合中的对象

    33

    Left

    返回/设置对象内部的左边与它的容

    器的左边之间的距离

    续表

    编号

    34

    Legend

    返回对Legend对象的引用,它包含有关小

    图标的外观及其描述图表系列的伴随文字的信息

    35

    MousePointer

    返回/设置一个值,该值指定运行时当鼠标

    位于对象的特定部分时应显示的鼠标光标类型

    36

    Name

    返回/设置MSChart控件对象的名称

    37

    OLEDragMode

    返回/设置是由部件还是由程序员来处理OLE拖放操作

    38

    OLEDropMode

    返回/设置目标部件如何处理放操作

    39

    Parent

    返回包含控件或其他对象或者集合的窗体、对象或集合

    40

    Plot

    返回对Plot对象的引用,该对象描述图表的绘制区域

    41

    RandomFill

    该属性指定是否随机产生图表数据网格的数据

    42

    Repaint

    返回/设置值,该值决定图表被改变后是否重绘MSChart控件

    43

    Row

    返回/设置与图表关联的数据网格中当前列的指定行

    44

    RowCount

    返回/设置与图表关联的数据网格每一列的行数

    45

    RowLabel

    返回/设置一个数据标签,该标签用来标识

    图表中的当前数据点

    46

    RowLabelCount

    返回/设置与图表关联的数据网格行标签的级别数

    47

    RowLabelIndex

    返回/设置描述行标签级别的值

    48

    SeriesColumn

    返回/设置当前系列数据列位置

    49

    SeriesType

    返回/设置用于显示当前系列的类型

    50

    ShowLegend

    返回/设置一个决定图表的图例是否可见的值

    51

    Stacking

    设置一个决定图表的所有系列是否叠加放置的值

    52

    TabIndex

    返回/设置父窗体中大部分对象的Tab键次序

    53

    TabStop

    返回/设置一个值,该值用来指示是否能够

    使用Tab键来将焦点从一个对象移动到另一个对象

    54

    Tag

    返回/设置一个表达式用来存储程序中需要的额外数据

    55

    TextLengthType

    返回/设置一个值,该值指定文本的显示

    方式如何优化文本在屏幕或打印机上的输出效果

    56

    Title

    Title对象的引用,该对象描述图表的标题文本

    57

    TitleText

    返回/设置作为图表标题而显示的文本

    58

    Top

    返回/设置对象的内顶部和它的容器的顶边之间的距离

    59

    Visible

    返回/设置一个值,它判断是否显示图表元素

    60

    Width

    返回/设置MSChart控件对象的宽度

    下面将介绍MSChart控件中一些常用的属性。

    1.是否允许控件的颜色抖动

    要设置控件是否允许颜色抖动,要以通过控件的AllowDithering属性来完成。AllowDithering属性用于返回或设置一个值,该数值决定是否禁止八位彩色显示器上,图表的颜色抖动,以便使用MSChart控件自身的彩色调色板来增强图表的显示。AllowDithering属性的语法如下:

  1. Object.AllowDithering[=Boolean]
  2. AllowDithering属性的语法说明:

    Object:必需的参数,取值为一个对象表达式,其值是MSchart控件对象的名称。

    Boolean:必需的参数,取值为一个布尔表达式,其值用来指定是否允许颜色抖动,其常用取值为True或False。如果取值为True表示允许颜色抖动。如果取值为False表示MSChart控件的彩色调色板实现增强的彩色匹配和显示。系统默认值为False。

    下面代码将设置控件对象MSChart1允许中的图表颜色抖动。

  3. MSChart1.AllowDithering=True
  4. 源文档 <http://book.51cto.com/art/201007/215048.htm>

    27.1.2 图表控件的基本属性(2)

    2.是否允许动态旋转图像

    是否可以让控件中的图像旋转,可以通过控件的AllowdynamicRotation属性来设置。AllowdynamicRotation属性用于返回或设置一个值,它指示是否在按下Ctrl键显示旋转光标之后就可交互式地旋转其三维图表。AllowdynamicRotation属性的语法如下:

  1. Object.AllowDynamicRotation[=Boolean]
  2. Boolean参数取值为一个布尔表达式,其值用来指定是否允许动态旋转图像,其常用取值为True或False。如果取值为True表示可以使用光标交互式旋转图表。如果取值为False表示不能使用光标交互式旋转图表。系统默认值为True。

    3.是否允许选择控件中的图表

    设置控件中的图表是否允许被选择,可以通过控件的AllowSelections属性来设置。AllowSelections属性用于返回或设置一个值,用来指示是否可以选择图表对象。AllowSelections属性的语法如下:

  3. Object.AllowSelections[=Boolean]
  4. Boolean参数取值为一个布尔表达式,其值用来指定是否可选择图表中的对象,其常用取值为True或False。如果取值为True表示控件可以交互式地选择图表对象。 如果取值为False表示控件不能选择图表对象。系统默认值为True。

    4.是否允许控件选定整个系列

    要设置控件是否可以选择整个系列,可以通过控件的AllowSeriesSelection属性来设置。AllowSeriesSelection属性用于返回或设置一个值,它指出在单击的图表单个数据点时是否可选定整个系列。AllowSeriesSelection属性的语法如下:

  5. Object.AllowSeriesSelection[=Boolean]
  6. Boolean参数取值为一个布尔表达式,其值用来指定是否可选定系列,其常用取值为True或False。如果取值为True,表示可以单击数据点选定整个系列。如果取值为False表示单击数据点时仅选定该数据点而不选定整个系列。系统默认取值为True。

    5.设置显示三维图表

    要设置控件中显示的图表是否为三维图表,可以通过控件的Chart3d属性来设置。Chart3d属性用于返回一个值,该值指定图表是否为三维图表。Chart3d属性的语法如下:

  7. Object.Chart3D[=Boolean]
  8. Boolean参数取值为一个布尔表达式,其值用来指定控件是否显示三维图表。其常用取值为True或False。如果取值为True,表示控件中的图表是三维图表。如果取值为False表示控件中的图表不是三维图表。

    说明:其显示的图表是否为三维还要取决于控件的ChartType属性取值。

    6.设置控件图表的数据

    设置控件显示图表的数据,可通过控件的ChartData属性来设置。ChartData属性用于返回或设置一个数组,该数组的值将要被控件作为图表显示在控件上。ChartData属性的语法如下:

  9. Object.ChartData[=Data]
  10. Data参数取值为一个变体型数值、二维数组,其值包含用来绘制图表的数据。下面的代码表示根据数组"myData"中数组元素值,在MSChart控件对象绘制出图形,其代码如下:

  11. PrivateSubForm_Load()
  12. DimmyData(2,2)
  13. myData(0,1)="第一季度
  14. '设置第一列的标签
  15. myData(0,1)="第二季度
  16. '设置第二列的标签
  17. myData(1,2)=82'数组元素赋值
  18. myData(1,2)=130
  19. myData(2,2)=145'数组元素赋值
  20. myData(2,2)=120
  21. MSChart1.ChartData=myData'将数组myData赋给控件MSChartl
  22. EndSub
  23. 以上代码就是将数组myData赋给控件对象MSChart1,控件对象MSChart1根据数组中的值在控件中绘制出相应的图形来,数组myData的存储类型为变体型。

    说明:如果某个多维数组的第一列包含字符串,则这些字符串将成为图表的标签。

    7.设置控件图表显示的类型

    设置控件图表显示的类型,可通过控件的ChartType属性来设置。ChartType属性用于返回或设置用于显示图表的图表类型。ChartType属性的语法如下:

  24. Object.ChartType[=Type]
  25. Type参数取值为一个常数,其值表示图表的类型,常用取值如表27-2所示。

    表27-2 ChartType属性的取值

    VtChChartType3dBar

    表示图表的类型为3D条形图

    VtChChartType2dBar

    表示图表的类型为2D条形图

    VtChChartType3dLine

    表示图表的类型为3D折线图

    续表

    VtChChartType2dLine

    表示图表的类型为2D折线图

    VtChChartType3dArea

    表示图表的类型为3D面积图

    VtChChartType2dArea

    表示图表的类型为2D面积图

    VtChChartType3dStep

    表示图表的类型为3D阶梯图

    VtChChartType2dStep

    表示图表的类型为2D阶梯图

    VtChChartType3dCombination

    表示图表的类型为3D组合图

    VtChChartType2dCombination

    表示图表的类型为2D组合图

    VtChChartType2dPie

    表示图表的类型为2D饼图

    VtChChartType2dXY

    表示图表的类型为2D XY散点图

    下面代码将设置控件对象MSChart1中图表显示的类型设置为2D条形图,其代码如下:

  26. MSChart1.ChartType=VtChChartType2dBar
  27. 源文档 <http://book.51cto.com/art/201007/215049.htm>

    27.1.2 图表控件的基本属性(3)

    8.设置控件的数据列

    要设置控件中的当前数据列和数据列的总数,可以通过控件的Column属性和ColumnCount属性来完成。Column属性用于返回或设置数据网格中当前的数据列。ColumnCount属性用于返回或设置与图表关联的当前数据网格中的总列数。Column属性和ColumnCount属性的语法如下:

  1. Object.Column[=Col]
  2. Object.ColumnCount[=Count]
  3. Column属性和ColumnCount属性的语法说明:

    Col:取值为一个整型表达式,其值表示当前所操作的数据列。

    Count:取值为一个整型表达式,其值表示图表中的总列数。

    下面代码将设置控件对象MSChart1中总的列数设置为3、当前列设置1,其代码如下:

  4. MSChart1.ColumnCount=3'总的列数
  5. MSChart1.Column=1'当前列
  6. 说明:Column属性主要用来设置当前列的标签。

    9.设置控件的列标签

    设置控件中有关图表的列标签可以通过控件的ColumnLabel属性、ColumnLabelCount属性、ColumnLabelIndex属性来设置。ColumnLabel属性用于返回或设置与图表数据网格中的列关联的标签文本。ColumnLabelCount属性用于返回或设置与图表关联的数据网格中的列的标签级别数。ColumnLabelIndex属性用于返回或设置与图表关联的特定列标签的级别。ColumnLabel属性、ColumnLabelCount属性、ColumnLabelIndex属性的语法如下:

  7. Object.ColumnLabel[=Text]
  8. object.ColumnLabelCount[=Count]
  9. Object.ColumnLabelIndex[=Index]
  10. ColumnLabel属性的语法说明:

    Text:取值为一个字符串表达式,其值表示与数据网格中的列相关联的标签文本。

    Count:取值为一个整型表达式,其值表示列标签级别数。此属性以添加或删除数据网格列上的标签级别。

    Index:取值为一个整型表达式,其值用来标识列标签级别。

    下面代码将设置控件对象MSChart1中第3列的列标签为"教育",其代码如下:

  11. MSChart1.ColumnLabelIndex=3'设置当前操作的列
  12. MSChart1.ColumnLabel="教育"'当前列的标题
  13. 10.当前数据点

    设置控件中显示图表的数据,可以通过控件的Data属性来指定。Data属性用于返回或设置被插入图表数据网格中的当前数据点的数值。Data属性的语法如下:

  14. Object.Data[=Value]
  15. Value参数取值为一个整型表表达方式,其取值表示数据点数值。如果当前数据点已经包含数据,则新数据将代替原有数据。控件则会重新绘制图表以反映当前数据点的新数值。

    下面代码将设置控件对象MSChart1第一列、第二行的值,其值来源于数组myData中对应的数组元素值赋给控件中的当前数据点,其代码如下:

  16. MSChart1.Column=1'设置当前操作的列
  17. MSChart1.Row=2'设置当前操作的行
  18. MSChart1.Data=myData(2,1)'第一行第二列的数据
  19. 11.设置控件中图表的光标

    设置鼠标经过控件中的图表区是否显示光标,可通过控件的DoSetCursor属性来设置。DoSetCursor属性用于返回或设置一个数值,它指示图表是否能设置光标。DoSetCursor属性的语法如下:

  20. Object.DoSetCursor[=Boolean]
  21. Boolean参数取值为一个布尔表达式,其值用来指定是否使用自定义文本,其常用取值为True或False。如果取值为True表示应用程序可控制鼠标指针的外观。如果取值为False表示应用程序不能控制鼠标指针的外观。系统默认取值为True。DoSetCursor属性决定应用程序是否能够控制鼠标指针的外观。

    12.设置控件中图表的脚注

    要设置控件中图表的脚注信息可以能过控件的Footnote属性、FootnoteText属性来设置,Footnote属性用于返回对Footnote对象的引用,它提供注释图表所用描述文字信息。FootnoteText属性用于返回或设置用作脚注的文本。Footnote属性、FootnoteText属性的语法如下:

  22. Object.Footnote
  23. Object.FootnoteText[=Text]
  24. Text参数取值为一个字符串表达式,其值用来指定脚注信息。下面将设置控件对象MSChart1中图表的脚注设置成"说明:第一季度销售额××万元、第二季度销售额为××万元、平均销售额为××万元",代码如下:

    MSChart1.FootnoteText =" 说明:第一季度销售额××万元、第二季度销售额为××万元、平均销售额为××万元"

    还可以设置脚注的字体样式、颜色、大小等。

    源文档 <http://book.51cto.com/art/201007/215050.htm>

    27.1.2 图表控件的基本属性(4)

    13.是否允许重绘

    当控件图表中的值被改变后是否自动重绘控件。可以通过控件的Repaint属性来设置。Repaint属性用于返回或设置值,该值用来决定图表被改变后是否重绘MSChart控件对象。Repaint属性的语法如下:

    crosoft Windows Common Controls-2 6.0"选项并单击"确定"按钮。这时候Animation控件就被添加到VB的控件工具箱中。

  1. Object.Repaint[=Boolean]
  2. Boolean参数取值为一个布尔表达式,其值决定是否重绘该图表,其常用取值为True或False。如果取值为True表示重绘控件。如果取值为False表示当图表被改变后,不允许重绘该控件。系统默认取值为True。

    14.设置控件的数据行

    设置控件有关数据行的值,可通过控件的Row属性、RowCount属性来设置。Row属性用于返回或设置与图表关联的数据网格中当前列的指定行。RowCount属性用于返回或设置与图表关联的数据网格每一列的行数。Row属性、RowCount属性的语法如下:

  3. Object.Row[=Num]
  4. Object.RowCount[=Count]
  5. Row属性、RowCount属性的语法说明:

    Num:取值为一个整型表达式,其值表当前操作的行号。行的编号按从上至下的顺序,下标是从1开始。

    Count:取值为一个整型表达式,其值表示图表中总的行数。

    下面代码将设置控件对象MSChart1的总行数设为3、当前操作行设为2。

  6. MSChart1.RowCount=3'设置总的行数
  7. MSChart1.Row=2'设置当前操作的行
  8. 15.设置控件的行标签

    获得或设置控件有关数据行的值可以通过控件的RowLabel属性、RowLabelCount属性、RowLabelIndex属性来设置。RowLabel属性用于返回或设置一个数据标签,该标签用来标识图表中的当前数据点。RowLabelIndex属性用于返回或设置描述行标签级别的值。RowLabelCount属性用于返回或设置与图表关联的数据网格行标签的级别数。RowLabel属性、RowLabelCount属性、RowLabelIndex属性的语法如下:

  9. Object.RowLabel[=Text]
  10. Object.RowLabelCount[=Count]
  11. Object.RowLabelIndex[=Index]
  12. RowLabel属性、RowLabelCount属性、RowLabelIndex属性的语法说明:

    Text:取值为一个字符串表达式,其值用来指定行标签的文本。

    Count:取值为一个整型表达式,其值表示标签级别数。可通过该属性来添加或减少数据网格的行标签级别。行标签的级别从1开始,从右往左进行编号。标签的添加或减少均在左边进行。

    Index:取值为一个整型表达式。其值表示行标签级别。要给具有多级标签的行设置标签,或返回标签的当前值,必需先指定是对哪一级进行操作。行标签从右至左进行编号,编号从1开始。

    下面代码将设置控件对象MSChart1中第1行的行标签为"2006年度",其代码如下:

  13. MSChart1.RowLabelIndex=2'设置当前操作的行
  14. MSChart1.RowLabel="2006年度"'设置当前行的标题
  15. 16.设置控件的当前系列

    获得或设置当前数据列的位置和数据列的类型可以通过控件的SeriesColumn属性、SeriesType属性来设置。SeriesColumn属性用于返回或设置当前系列数据列位置。SeriesType属性用于返回或设置用于显示当前系列的类型。SeriesColumn属性、SeriesType属性的语法如下:

  16. Object.SeriesColumn[=Pos]
  17. Object.SeriesType[=Type]
  18. SeriesColumn属性、SeriesType属性的语法说明:

    Pos:取值为一个整型表达式,其值表示当前系列的列位置。可以使用这个属性对系列重新排序。如果两个系列被指定到同一位置,就形成叠放。

    Type:取值为一个常数表达式,其值用来显示该系列的方法。其常用取值如表27-3所示。

    表27-3 SeriesType属性的取值

    VtChSeriesType3dBar

    三维直方图

    VtChSeriesType2dArea

    二维面积图

    VtChSeriesType2dBar

    二维直方图

    VtChSeriesType3dStep

    三维阶梯图

    VtChSeriesType3dLine

    三维折线图

    VtChSeriesType2dStep

    二维阶梯图

    VtChSeriesType2dLine

    二维折线图

    VtChSeriesType2dXY

    XY散点图

    VtChSeriesType3dArea

    三维面积图

    VtChSeriesType2dPie

    二维饼图

    说明:在使用SeriesType属性之前必需使用Column属性来选择相应的系列。

    17.设置图表的标题

    要设置控件中图表的标题,可以通过控件的TitleText属性来设置。TitleText属性用于返回或设置作为图表标题而显示的文本。TitleText属性的语法如下:

  19. Object.TitleText[=Text]
  20. Text参数取值为一个字符串表达式,其值用来显示图表标题的文本。下面将把控件对象MSChart1中图表的标题设置"2006、2007年度销售额",代码如下:

  21. MSChart1.TitleText="20062007年度销售额"'设置图表标题
  22. 源文档 <http://book.51cto.com/art/201007/215051.htm>

    27.1.3 图表控件的基本方法

    设置MSChart控件对象获得焦点、移动控件、重绘控件等操作,可通过调用MSChart控件的一些方法来完成。MSChart控件的基本方法如表27-4所示。

    表27-4 MSChart控件的基本方法

    编号

    1

    Drag

    用于MSChart控件对象的开始、

    结束或取消拖动操作

    2

    EditCopy

    Windows图元文件格式将当前图表

    的图片复制到剪贴板中;它同时将创

    建图表使用的数据复制到剪贴板中

    3

    EditPaste

    将剪贴板中的Windows图元文件图形

    或由Tab键分隔的文本粘贴到图表的当前选定区域

    4

    GetSelectedPart

    标识当前选定的图表元素

    5

    Layout

    布置图表,强制重新计算自动数值

    6

    Move

    用以移动MSChart控件对象

    7

    OLEDrag

    引起部件初始化OLE拖放操作

    8

    Refresh

    强制全部重绘一个窗体或控件

    9

    SelectPart

    选择指定的图表区域

    10

    SetFocus

    将焦点转移到MSChart控件对象上

    11

    ToDefaults

    返回图表的初始设置值

    12

    TwipsToChartPart

    使用XY坐标来标识图表的区域

    13

    ZOrder

    将指定的MDIFormForm

    控件放置在其图层的前端或后端

    下面将介绍MSChart常用的方法。

    1.复制图表

    要将控件的图表复制到操作系统中的剪切板中,可以通过控件的EditCopy方法来完成。EditCopy方法用于以Windows图元文件格式将当前图表的图片复制到剪贴板中。它同时将创建图表使用的数据复制到剪贴板中。使用此方法,可将图表数据或图表图片本身粘贴到另一应用程序中。因为数据和图表图片都存储在剪贴板上,因此粘贴到新的应用程序中的内容取决于该应用程序的类型。例如,如果在代码中执行图表的EditCopy方法,然后切换到Excel工作表来选择"编辑"中的"粘贴"命令,则将把图表数据集复制到工作表中。如要将图表图片插入到工作表中,可在选定"编辑粘贴特殊"后选择"图片"类型。EditCopy的语法如下:

  1. Object.EditCopy
  2. EditCopy方法为一个无参方法。

    2.粘贴图表

    要将操作系统中剪切板中的图元文件和数据粘贴到控件中,可以通过控件的EditPaste方法来完成。EditPaste方法用于将剪贴板中的Windows图元文件图形或由Tab键分隔的文本粘贴到图表的当前选定区域。EditPaste方法的语法如下:

  3. Object.EditPaste
  4. 图表可接受剪贴板中的几种类型的信息,这取决于调用EditPaste时选定的图表元素。如果选定了整个图表,则图表在剪贴板中寻找数据并试图使用这些新数据重新绘制图表。如果选定能够接受图片的项目,例如选定了条形图或图表背景,则图表在剪贴板上寻找图元文件。如果找到了图元文件,就使用该图元文件填充选定对象。

    3.获得选定图标元素

    要获得当前控件中所选择的图表元素,可以通过控件的GetSelectedPart方法来设置。GetSelectedPart方法用于标识当前选定的图表元素。GetSelectedPart方法的语法如下:

  5. Object.GetSelectedPart(Part,Index1,Index2,Index3,Index4)
  6. GetSelectedPart方法的语法说明:

    Part:取值为一个整型表达式,其值用来指定图表元素。

    Index1:取值为一个整型表达式,如果元素引用一个系列或一个数据点,则此参数指定引用的系列。系列编号时从1开始,根据它们对应的列在数据网格中从左到右显示的顺序依次编号。如果元素引用坐标轴或坐标轴标签,其常用取值如表27-5所示。

    Index2:取值为一个整型表达式,如果元素引用数据点,则此参数指定系列中由Index1标识的数据点。

    Index3:取值为一个整型表达式,如果元素引用坐标轴标签,则此参数引用标签级别。坐标轴标签级别从1开始、由坐标轴向外依次编号。如果元素不是坐标轴标签,则此参数无效。

    Index4:取值为一个整型表达式,此时未使用该参数。

    表27-5 Index1参数的取值

    VtChAxisIdX

    标识X坐标轴

    VtChAxisIdY2

    标识次要Y坐标轴

    VtChAxisIdY

    标识Y坐标轴

    VtChAxisIdZ

    标识Z坐标轴

    源文档 <http://book.51cto.com/art/201007/215052.htm>

    27.1.4 图表控件的基本事件

    MSChart控件对象提供常用事件有单击事件、双击事件、获得焦点事件、失去焦点事件等。MSChart控件的基本事件如表27-6所示。

    表27-6 MSChart控件的基本事件

    编号

    1

    AxisActivated

    双击图表的标轴时,该事件发生

    2

    AxisLabelActivated

    双击坐标轴标签时,该事件发生

    3

    AxisLabelSelected

    单击坐标轴标签时,该事件发生

    4

    AxisLabelUpdated

    改变坐标轴标签时,该事件发生

    5

    AxisSelected

    单击图表坐标轴时,该事件发生

    6

    AxisTitleActivated

    双击坐标轴标题时,该事件发生

    7

    AxisTitleSelected

    单击坐标轴标题时,该事件发生

    8

    AxisSelected

    单击图表坐标轴时,该事件发生

    9

    AxisTitleActivated

    双击坐标轴标题时,该事件发生

    10

    AxisTitleSelected

    单击坐标轴标题时,该事件发生

    11

    AxisTitleUpdated

    坐标轴标题变更时,该事件发生

    12

    AxisUpdatedEvent

    坐标轴变更时,该事件发生

    13

    ChartActivated

    双击MSChart控件时,该事件发生,

    但是双击图表的特定元素时事件不 发生

    14

    ChartSelected

    单击MSChart控件时,该事件发生,

    但是单击图表的某个元素时事件不 发生

    15

    ChartUpdated

    当图表变更时,该事件发生

    16

    Click

    此事件是在一个对象上按下然后释放

    一个鼠标按键时发生

    17

    DataUpdated

    图表数据网格变更时,该事件发生

    18

    DblClick

    当在一个对象上按下和释放鼠标按键并

    再次按下和释放鼠标按键时,该事件发生

    19

    DonePainting

    重新绘制图表后,该事件立即发生

    20

    DragDrop

    在一个完整的拖放动作完成或使用

    Drag方法,并将其Action参数被设置为2时发生

    21

    DragOver

    在拖放操作正在进行时发生

    22

    FootnoteActivated

    双击图表脚注时,该事件发生

    23

    FootnoteSelected

    单击图表脚注时,该事件发生

    24

    FootnoteUpdated

    图表脚注变更时,该事件发生

    25

    GotFocus

    MSChart控件对象获得焦点时产生该事件

    26

    KeyDown

    MSChart控件对象具有焦点时按下一个键时发生

    27

    KeyUp

    MSChart控件对象具有焦点时松开一个键时发生

    28

    KeyPress

    当用户在MSChart控件对象上按下和松开一个键时发生

    29

    LegendActivated

    双击图表图例时,该事件发生

    30

    LegendSelected

    单击图表的图例时,该事件发生

    31

    LegendUpdated

    当图表的图例变更时,该事件发生

    32

    LostFocus

    MSChart控件对象失去焦点时发生

    33

    MouseDown

    当在MSChart控件对象上按下鼠标按键时发生

    34

    MouseMove

    当在MSChart控件对象上移动鼠标时发生

    35

    MouseUp

    当在MSChart控件对象上释放鼠标按键时发生

    36

    OLECompleteDrag

    MSChart控件对象被放到目标部件

    时发生,并通知MSChart控件对象

    拖放操作被执行或取消

    续表

    编号

    37

    OLEDragDrop

    MSChart控件对象决定放操作能发生,

    MSChart控件对象被放到目标

    部件时,此事件发生

    38

    OLEDragOver

    当一个控件对象在另一个控件

    对象上拖动时发生

    39

    OLEGiveFeedback

    在每个OLEDragOver事件后发生。

    OLEGiveFeedback允许源部件提供可视的反馈

    40

    OLESetData

    当目标部件在源的DataObject对象上执行

    GetData方法,但是还没有加载规定格式

    的数据之前,在源部件上发生

    41

    OLEStartDrag

    当部件的OLEDrag方法被执行时或

    者在OLEDragMode属性被设为Automatic

    部件初始化OLE拖放操作时发生

    42

    PlotActivated

    双击图表绘图区时产生该事件

    43

    PlotSelected

    单击图表绘图区时产生该事件

    44

    PlotUpdated

    当图表绘图区被改动时产生该事件

    45

    PointActivated

    双击数据点时产生该事件

    46

    PointLabelActivated

    双击数据点标签时产生该事件

    47

    PointLabelSelected

    单击数据点标签时产生该事件

    48

    PointLabelUpdated

    当数据点标签被改变时产生该事件

    49

    PointSelected

    单击数据点时产生该事件

    50

    PlotUpdated

    当图表绘图区被改动时产生该事件

    51

    SeriesActivated

    双击图表系列时产生该事件

    52

    SeriesSelected

    当单击图表系列时产生该事件

    53

    SeriesUpdated

    当图表系列改变时产生该事件

    54

    TitleActivated

    双击图表标题时产生该事件

    56

    TitleSelected

    单击图表标题时产生该事件

    55

    TitleUpdated

    当改变图表标题时产生该事件

    57

    Validate

    在焦点转换到另一个控件之前发生

    源文档 <http://book.51cto.com/art/201007/215053.htm>

    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控件中添加所有可显示图表的类型。窗体加载事件过程的代码如下:

  1. OptionExplicit
  2. PrivateSubForm_Load()'加载窗体
  3. MSChart1.Visible=False'图表控件不可见
  4. Combo1.AddItem"3D条形图"'Combo控件中添加图表的类型
  5. Combo1.AddItem"2D条形图"
  6. Combo1.AddItem"3D折线图"
  7. Combo1.AddItem"3D面积图"
  8. Combo1.AddItem"2D面积图"
  9. Combo1.AddItem"3D面积图"
  10. Combo1.AddItem"3D组合图"
  11. Combo1.AddItem"2D组合图"
  12. Combo1.AddItem"2D饼图"
  13. Combo1.AddItem"2DXY散点图"
  14. EndSub
  15. 在改变窗体上的ComBox控件图表显示的类型时,需要在改变图表类型的同时其显示的图表也做相应的改变。这个需要在ComBox控件的单击事件中完成。ComBox控件单击事件过程中的代码如下:

  16. PrivateSubCombo1_Click()'选择图表类型时
  17. SelectCaseCombo1.ListIndex'判断所选择的图表类型的索引号
  18. Case0'根据索引号给MSChart1
  19. chartType属性赋相应的值
  20. MSChart1.chartType=VtChChartType3dBar'3D条形图
  21. Case1
  22. MSChart1.chartType=VtChChartType2dBar'2D条形图
  23. Case2
  24. MSChart1.chartType=VtChChartType3dLine'3D折线图
  25. Case3
  26. MSChart1.chartType=VtChChartType2dLine'2D折线图
  27. Case4
  28. MSChart1.chartType=VtChChartType3dArea'3D面积图
  29. Case5
  30. MSChart1.chartType=VtChChartType2dArea'2D面积图
  31. Case6
  32. MSChart1.chartType=VtChChartType3dStep'3D阶梯图
  33. Case7
  34. MSChart1.chartType=VtChChartType2dStep'2D阶梯图
  35. Case8
  36. MSChart1.chartType=VtChChartType3dCombination'3D组合图
  37. Case9
  38. MSChart1.chartType=VtChChartType2dCombination'2D组合图
  39. Case10
  40. MSChart1.chartType=VtChChartType2dPie'2D饼图
  41. Case11
  42. MSChart1.chartType=VtChChartType2dXY'2DXY散点图
  43. EndSelect
  44. EndSub
  45. 窗体"显示"按钮主要用将数据按照图形的方式在窗体显示出来。在显示图表之前需要对显示的数据进行赋值后才能进行图表的显示。窗体"显示"按钮单击事件过程下的代码如下:

  46. PrivateSubCommand1_Click()'显示按钮
  47. DimLi_iAsInteger'定义一个变量用做循环变量
  48. DimLi_jAsInteger
  49. DimLi_YearArray(2)AsInteger'声明一个数组用于存入年份的值
  50. DimLi_DataArray(2,12)'声明一个二维数组。用于
    存储每个月的销售额
  51. DimFirstTimeAsBoolean'用于标识是否为第
    一次显示。如为第一次显示则
  52. True
  53. MSChart1.Visible=True'图表控件显示在窗体上
  54. FirstTime=True'赋值为True
  55. Li_YearArray(1)=2006'赋年份的值
  56. Li_YearArray(2)=2007
  57. Li_DataArray(1,1)=120'2006年中的每个月份赋一个销售额
  58. Li_DataArray(1,2)=80
  59. Li_DataArray(1,3)=45.3
  60. Li_DataArray(1,4)=10.4
  61. Li_DataArray(1,5)=46.6
  62. Li_DataArray(1,6)=189
  63. Li_DataArray(1,7)=182.45
  64. Li_DataArray(1,8)=142
  65. Li_DataArray(1,9)=125
  66. Li_DataArray(1,10)=95.99
  67. Li_DataArray(1,11)=64.32
  68. Li_DataArray(1,12)=16.1'2006年第12月的销售额为16.1
  69. Li_DataArray(2,1)=45.63'2007年中的每个月份赋一个销售额
  70. Li_DataArray(2,2)=124.66
  71. Li_DataArray(2,3)=140
  72. Li_DataArray(2,4)=201
  73. Li_DataArray(2,5)=40
  74. Li_DataArray(2,6)=88.2
  75. Li_DataArray(2,7)=43.5
  76. Li_DataArray(2,8)=68.4
  77. Li_DataArray(2,9)=75.2
  78. Li_DataArray(2,10)=175.22
  79. Li_DataArray(2,11)=4.2
  80. Li_DataArray(2,12)=73.86'2007年第12月的销售额为73.86
  81. MSChart1.chartType=VtChChartType2dBar'
    置MSChart1的图表类型
  82. MSChart1.ColumnCount=12'设置
    图表中的总的列数
  83. ForLi_i=1To2'将循环每个年份
  84. MSChart1.RowCount=Li_i'图表的总行数
  85. ForLi_j=1To12'将数组中的每个月份
    的值显示在图表中
  86. MSChart1.Column=Li_j'当前列数
  87. MSChart1.Row=Li_i'当前行
  88. MSChart1.Data=Li_DataArray(Li_i,Li_j)
    '当前数据点的值
  89. MSChart1.RowLabel=Li_YearArray(Li_i)&""'当前行标签
  90. IfFirstTimeThen'判断是否为第一
    次加载,如果是第一次则打
  91. 印每一列的标签
  92. MSChart1.ColumnLabelIndex=Li_i
  93. MSChart1.Column=Li_j'当前列的索引
  94. SelectCaseLi_j'根据值来打印相应列的标签
  95. Case1
  96. MSChart1.ColumnLabel="一月"'一月
  97. Case2
  98. MSChart1.ColumnLabel="二月"'二月
  99. Case3
  100. MSChart1.ColumnLabel="三月"'三月
  101. Case4
  102. MSChart1.ColumnLabel="四月"'四月
  103. Case5
  104. MSChart1.ColumnLabel="五月"'五月
  105. Case6
  106. MSChart1.ColumnLabel="六月"'六月
  107. Case7
  108. MSChart1.ColumnLabel="七月"'七月
  109. Case8
  110. MSChart1.ColumnLabel="八月"'八月
  111. Case9
  112. MSChart1.ColumnLabel="九月"'九月
  113. Case10
  114. MSChart1.ColumnLabel="十月"'十月
  115. Case11
  116. MSChart1.ColumnLabel="十一月"'十一月
  117. Case12
  118. MSChart1.ColumnLabel="十二月"'十二月
  119. EndSelect
  120. EndIf
  121. Next
  122. FirstTime=False'第一次循环完成后,
    值设为False
  123. Next
  124. MSChart1.TitleText="20062007年度销售额(单位:万元)"'
    置图标的标题
  125. MSChart1.Title.VtFont.Size=15'标题的大小
  126. MSChart1.Title.VtFont.VtColor.Set255,0,0'标题的颜色
  127. MSChart1.Title.TextLayout.HorzAlignment=
    VtHorizontalAlignmentCenter
  128. '标题文本的对齐方式
  129. '设置图标的脚注信息,这里没
    有计算月平均销售额
  130. MSChart1.Footnote.Text="说明:最高销售额为201万元、最低销售额为4.2万元、
  131. 平均销售额为XX万元"
  132. MSChart1.Footnote.VtFont.Size=12'脚注的大小
  133. MSChart1.Footnote.VtFont.VtColor.Set255,0,0'脚注的颜色
  134. MSChart1.Footnote.TextLayout.HorzAlignment=
    VtHorizontalAlignmentRight

  135. '脚注文本的对齐方式
  136. MSChart1.ShowLegend=True'显示图例
  137. EndSub
  138. 运行程序,其运行效果如图27-1所示。在窗体上单击"显示"按钮,程序就会把Li_DataArray数组中的值在MSChart1中以图表的方式显示出来。可以通过选择图表类型列表中的图表名称来改变图表显示的方式。在本示例中图表中显示的数据是静态(虚拟的),如果要在图表中显示数据库中的数据则与本示例差不多唯一不同的是在显示图表之前,要将数据库的数据赋给对应数组,有兴趣的读者可以自己实现下。

    源文档 <http://book.51cto.com/art/201007/215055.htm>

你可能感兴趣的:(chart)