搜档网
当前位置:搜档网 › 用Chart控件绘制动态图表

用Chart控件绘制动态图表

用Chart控件绘制动态图表
用Chart控件绘制动态图表

用Chart控件绘制动态图表

---- 进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量。ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用。本文仅以VC++为例说明Chart控件的使用。

---- Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性、事件很多,功能非常强大,可实现柱状直方图、曲线走势图、饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可以带或不带坐标系,可以自由配置各条目的颜色、字体等等。

一安装和使用Chart控件

----在用到Chart控件的项目中安装该控件:从Project->Add to Project ->Components And Controls->Registered Active Xcontrols,选择Chart控件,则ClassWizard会生成相应的C++类,其中类CMSChart是由CWnd派生来的,它是Chart 控件的主要类,其他的类全部是由COleDispatchDriver派生来,控制控件中的相应对象,完成各部分相关功能,如CvcAxis类是实现坐标轴相关功能的源代码。同时在项目的控件工具箱上会出现代表Chart控件的按钮,使用时把Chart控件按钮从工具箱拖到对话框中,调整大小即可。

----Chart控件至少有45个属性、9个方法、49个事件,在这里就不一一列举了。

---- 在设计中,我们可以在主要属性页里修改各属性的属性值:右击对话框窗口中的Chart控件,选择“Properties”菜单项,就会弹出主要属性页对话框,对其中各属性值进行设置。有些属性在主要属性页里没有列出,只能编程修改。另外要动态绘制图表,必须掌握对控件的编程控制。

---- 首先在对话框类中定义控件变量,以便编程时操纵控件。如对话框类定义如下:

class CAbcDlg : public CDialog{

public:

CAbcDlg(CWnd*pParent = NULL);

//{{AFX_DA TA(CAbcDlg)

enum { IDD = IDD_ABC_DIALOG };

CMSChart m_Chart;

//}}AFX_DA TA

......

};

----ActiveX控件的属性和方法在控件内部对应唯一一个整数索引值,编程时可以通过索引来设置或获取控件的属性值,也可以通过调用控件的C++类(在这里就是CMSChart)的成员函数设置或获取控件的属性值及调用控件的方法。例如:

----在CMSChart类实现中有如下代码:

CString CMSChart::GetData(){

CString result;

InvokeHelper(0x9, DISPA TCH_PROPERTYGET,

VT_BSTR, (void*)&result, NULL);

return result;

}

void CMSChart::SetData(LPCTSTR lpszNewV alue){

static BYTE parms[] =VTS_BSTR;

InvokeHelper(0x9, DISPA TCH_PROPERTYPUT,

VT_EMPTY, NULL, parms,lpszNewV alue);

}

void CMSChart::Refresh(){

InvokeHelper(DISPID_REFRESH,

DISPA TCH_METHOD, VT_EMPTY, NULL, NULL);

}

----这段代码表明:属性“Data”索引值为0x9,我们可以调用函数SetData对图表中某点的值进行设置。索引值为DISPID_REFRESH的方法“Refresh”,调用它进行刷新。如:

CString str=“34.5";

m_Chart.SetData(str);

m_Chart.Refresh();

......

----阅读CMSChart类的实现会发现,有些属性的值不是普通的BOOL、CString等数据类型,而是另一个控件驱动类的类变量,如:

CVcPlot CMSChart::GetPlot(){

LPDISPA TCH pDispatch;

InvokeHelper(0x28, DISPA TCH_PROPERTYGET,

VT_DISPA TCH, (void*)&pDispatch, NULL);

return CVcPlot(pDispatch);

}

----在CVcPlot类的实现中有如下代码:

CVc Axis CVcPlot::GetAxis

(long axisID, const V ARIANT&Index){

LPDISPA TCH pDispatch;

static BYTE parms[] =VTS_I4 VTS_V ARIANT;

InvokeHelper(0x1f, DISPA TCH_PROPERTYGET,

VT_DISPA TCH, (void*)&pDispatch, parms, axisID, &Index);

return CVcAxis(pDispatch);

}

----而CVcAxis类的实现中有如下代码:

CVc V alueScale CVcAxis::GetV alueScale(){

LPDISPA TCH pDispatch;

InvokeHelper(0x9, DISPA TCH_PROPERTYGET,

VT_DISPA TCH, (void*)&pDispatch, NULL);

return CVcV alueScale(pDispatch);

}

----而CVcV alueScale类的实现中又有如下代码:

void CVcV alueScale::SetMaximum(double newV alue){

static BYTE parms[] =VTS_R8;

InvokeHelper(0x3, DISPA TCH_PROPERTYPUT,

VT_EMPTY, NULL, parms,newV alue);

}

----这正是Chart控件的灵活性所在,根据上述代码,如下的调用:

V ARIANT var;

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale()

.SetMaximum(50.0);

可实现把纵坐标的最大刻度设为50.0。

----控件触发的事件,如Click、MouseDown等,如果需要处理,可以通过ClassWizard在对话框类中定义相应的处理函数,实现相关的处理功能。

二动态绘制图表实例

---- 在一个温度采集系统中,希望把采集来的各项温度值实时显示,用Chart控件绘制曲线走势图:

各温度项以不同颜色的曲线表示;

横坐标为时间,纵坐标为温度值,均要求滚动显示;

在每次采样完成后,刷新屏幕。

----设计思路

随着时间的推移,采集来的数据不断增加,不一定在一屏中显示,所以系统打开一个实时数据库,存放采集来的实时数据。显示时,需要哪个时间段的数据,就从数据库中读取。在对话框资源编辑时,增加水平滚动条和垂直滚动条,以便配合Chart控件进行滚动显示。

为对话框启动定时器,按采样间隔进行采样,并刷新屏幕显示。

----主要相关代码如下:

BOOL CAbcDlg::OnInitDialog(){

CDialog::OnInitDialog();

pDataDB = new dbase;

//实时数据记录库,类dbase的基类为CDaoRecordset

pDataDB->Open(dbOpenDynaset, “select

*from data");

V ARIANT var;

m_Chart.GetPlot().GetAxis(1,var).GetV alueScale().

SetAuto(FALSE);//不自动标注y轴刻度

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale().

SetMaximum(37);//y轴最大刻度

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale().

SetMinimum(32);//y轴最小刻度

m_Chart.GetPlot().GetAxis(1,var).GetV alueScale().

SetMajorDivision(5);//y轴刻度5等分

m_Chart.GetPlot().GetAxis(1,var).GetV alueScale().

SetMinorDivision(1);//每刻度一个刻度线

m_Chart.SetColumnCount(3); //3个温度项,3条曲线

m_Chart.GetPlot().GetSeriesCollection().GetItem(1).

GetPen().GetVtColor().Set(0, 0, 255);//线色

m_Chart.GetPlot().GetSeriesCollection().GetItem(2).

GetPen().GetVtColor().Set(255, 0, 0);

m_Chart.GetPlot().GetSeriesCollection().GetItem(3).

GetPen().GetVtColor().Set(0, 255, 0);

m_Chart.GetPlot().GetSeriesCollection().

GetItem(1).GetPen().SetWidth(2);//线宽

m_Chart.GetPlot().GetSeriesCollection().

GetItem(2).GetPen().SetWidth(2);

m_Chart.GetPlot().GetSeriesCollection().

GetItem(3).GetPen().SetWidth(2);

m_Chart.SetRowCount(10); //一屏显示10个采样时刻

m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().

SetAuto(FALSE);//不自动标注x轴刻度

m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().

SetDivisionsPerLabel(1);//每时刻一个标注

m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().

SetDivisionsPerTick(1);//每时刻一个刻度线

m_ScrLeft.SetScrollRange(0,45);

//垂直滚动条可滚动范围(温度值范围0-50,

每滚动1度,一屏显示5度)

m_ScrLeft.SetScrollPos(45-32);//垂直滚动条的当前位置

m_ScrBottom.SetScrollRange(0, 0);//水平滚动条的可滚动范围m_ScrBottom.SetScrollPos(0);//水平滚动条的当前位置

SetTimer(23, 300000, NULL);//启动定时器,定时间隔5分钟

Sample();//调用采样函数进行第一次采样,并把数据记录入库

return TRUE;

}

void CAbcDlg::OnTimer(UINT nIDEvent) {

Sample();//采样,并把数据记录入库

if (pDataDB->GetRecordCount()>10)

theApp.nBottomRange = pDataDB->GetRecordCount()-10;

else

theApp.nBottomRange = 0;

//用全局变量保存水平滚动条的范围值

m_ScrBottom.SetScrollRange(0,theApp.nBottomRange);

theApp.nBottomPos = theApp.nBottomRange;

m_ScrBottom.SetScrollPos(theApp.nBottomPos);

//修正水平滚动条的显示

DrawPic();//调用函数,刷新曲线显示

CDialog::OnTimer(nIDEvent);

}

void CAbcDlg::DrawPic() {

char s[10];

UINT row = 1;

pDataDB->MoveFirst();

pDataDB->Move(theApp.nBottomPos);

//只从数据库中取某时间段的数据进行显示

while ((!pDataDB->IsEOF()) &&(row <= 10)){

m_Chart.SetRow(row);

m_Chart.SetRowLabel((LPCTSTR)pDataDB

->m_date_time.Format(“%H:%M"));

//以采样时刻做x轴的标注

m_Chart.SetColumn(1);

sprintf(s, “%6.2f", pDataDB->m_No1);

m_Chart.SetData((LPCSTR)s);

m_Chart.SetColumn(2);

sprintf(s, “%6.2f", pDataDB->m_No2);

m_Chart.SetData((LPCSTR)s);

m_Chart.SetColumn(3);

sprintf(s, “%6.2f", pDataDB->m_No3);

m_Chart.SetData((LPCSTR)s);

pDataDB->MoveNext();

row++;

}

while ((row <= 10)){

m_Chart.SetRow(row);

m_Chart.SetRowLabel((LPCTSTR)“");

m_Chart.GetDataGrid().SetData(row, 1, 0, 1);

//采样数据不足10个点, 对应的位置不显示

m_Chart.GetDataGrid().SetData(row, 2, 0, 1);

m_Chart.GetDataGrid().SetData(row, 3, 0, 1);

row++;

}

m_Chart.Refresh();

}

void CAbcDlg::OnHScroll(UINT nSBCode,

UINT nPos, CScrollBar*pScrollBar) {

if (pDataDB->GetRecordCount()>10)

theApp.nBottomRange = pDataDB->GetRecordCount()-10;

else

theApp.nBottomRange = 0;

m_ScrBottom.SetScrollRange(0, theApp.nBottomRange);

switch (nSBCode){

case SB_LINERIGHT:

if (theApp.nBottomPos < theApp.nBottomRange){

theApp.nBottomPos = theApp.nBottomPos +1;

m_ScrBottom.SetScrollPos(theApp.nBottomPos);

DrawPic();

}

break;

case SB_LINELEFT:

if (theApp.nBottomPos > 0){

theApp.nBottomPos = theApp.nBottomPos -1;

m_ScrBottom.SetScrollPos(theApp.nBottomPos);

DrawPic();

}

break;

}

CDialog::OnHScroll(nSBCode, nPos, pScrollBar);

}

void CAbcDlg::OnVScroll(UINT nSBCode,

UINT nPos, CScrollBar*pScrollBar) {

V ARIANT var;

double max1,min1,f;

switch (nSBCode){

case SB_LINEDOWN:

f = m_Chart.GetPlot().GetAxis(1, var).

GetV alueScale().GetMinimum() -1;

if (f>=0) {//最小刻度大于等于0, 则可以滚动

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale().

SetMinimum(f);

f = m_Chart.GetPlot().GetAxis

(1, var).GetV alueScale().GetMaximum() -1;

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale().

SetMaximum(f);

pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() +1);

m_Chart.Refresh();

}

break;

case SB_LINEUP:

f = m_Chart.GetPlot().GetAxis(1, var).

GetV alueScale().GetMaximum() +1;

if (f <= 50) {//最大刻度小于等于50, 则可以滚动

m_Chart.GetPlot().GetAxis

(1, var).GetV alueScale().SetMaximum(f);

f = m_Chart.GetPlot().GetAxis(1, var).

GetV alueScale().GetMinimum() +1;

m_Chart.GetPlot().GetAxis(1, var).GetV alueScale().

SetMinimum(f);

pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() -1);

m_Chart.Refresh();

}

break;

}

CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

----特别注意,程序中用到的关于控件的类,如CVcAxis等,需要在AbcDlg.cpp文件的开始处说明:#include “VcAxis.h"。

----限于篇幅,文中仅仅是一个简单示例的部分代码。在实际应用中,一般会有更多的需求,比如:对坐标轴进行缩放显示;采样有可能得不到正确的采样值时曲线显示不连续等等,这时需要根据需求编写相应代码。

Passing an Array of V alues to the V isual C++ MSChart OCX

Great step-by-step instructions to passing data to the VC++ MSChart compone nt

Published July 27, 2000

By JL Colson

Step 1 : Creating the Project

Start Visual C++ en create a simple dialog based application labelled "Graph"

Step 2 : Add the MSChart OCX to Y our Project

Select "project menu" option and select "Components and contols" and then c hoose the MSChart component and click "add."

Step 3 : Add the MSChart OCX to Y our Dialog

Select resources view tab and open the main dialog. (It 抯 a simple dialog-based application). Drop the ocx on your dialog . Now, label your Chart "IDC_MSCAHRT1"

Now, choose menu option " Classwizard " to create a member variable of your chart labelled "m_Chart"

Step 4: Add the Code

Now add a button labeled "Go" to your dialog. Double-click it to edit the code and add the following code in the On_Go function:

COleSafeArray saRet;

DWORD numElements[] = {10, 10}; // 10x10

saRet.Create(VT_R8, 2, numElements);

long index[2];

for(index[0]=0; index[0]<10; index[0]++) {

for(index[1]=0; index[1]<10; index[1]++) {

double val = index[0] + index[1]*10;

saRet.PutElement(index, &val);

}

}

m_Chart.SetChartData(saRet.Detach());

m_Chart.Refresh;

Step 5: Building and Running the Application

Build and execute your app, then click the "Go" button. Here is the result

mschart控件使用详解

一.数据源? 说到绘制图表,可能很多人的第一反应除了是图表呈现的方式外,更关心的便是数据如何添加,记得在很多年前,哪时要绘制一个数据曲线图,一直找不到好的呈现方式,后来使用了SVG的绘图模式,不过在添加数据的时候可谓吃尽了苦头,毕竟,SVG只是一种描述语言,要动态的实现一个图表的绘制,是非常困难的.对于微软的图表控件,数据添加是一件很简单的方式,它支持多种数据添加方式,如: ·可以在图表的设计界面,在属性设置窗口中的Series属性下的Points中添加需要的数据. ·可以在图表的设计界面中,在属性中绑定一个数据源. ·可以在后台代码中,动态添加数据. ·可以在后台代码中设置一个或多个数据源,直接绑定到图表中. 在此处,我只着重讲解一下第3,4两点.对于第3点,相对来说比较简单,在后台代码中,找到要添加代码的Series,通过它下面Points的Add、AddXY、AddY等方法,即可以实现数据的添加.例如: 1.doublet; 2.for(t=0;t<=*;t+=6) 3.{ 4.doublech1=(t); 5.doublech2=2);

6.["Channel1"].(t,ch1); 7.["Channel2"].(t,ch2); 8.} 复制代码 注:代码摘自微软的例子,上例中,Chart1为图表的名字,Channel1、Channel2分别表示两个Series数据序列) 二.绑定数据? 先来看看图表控件都支持什么类型的数据绑定,根据官方文档的说法,只要是实现了IEnumerable接口的数据类型,都可以绑定到图表控件中,例如: DataView,DataReader,DataSet,DataRow,DataColumn,Array,List,SqlCommand,OleD bCommand,SqlDataAdapter,及OleDbDataAdapter对象。 对于开发来说,最常用的还是DataView、DataReader、DataSet、DataRow、Array、List 这几种类型了,有几点需要注意一下: ·图表控件支持多数据源的绑定,例如:X轴绑定一个数据集ds1,Y轴可以绑定另一个数据集ds2,当然也可以是X轴绑定到一个List数据对象,Y轴绑定到一个DataView对象等等。 ·图表控件的绑定方式一般有两种,常规绑定及交差表的绑定。 ·图表控件的Y轴数据,支持一次绑定多个值,以绘制时间、区域、使用量等之类的图形。 绑定数据的流程如下: 2008-11-1022:19:03

VB6.0中通过MSChart控件调用数据库

《VB6.0中通过MSChart控件调用数据库》 VB6.0中的MSChart控件是一个功能强大的高级图表工具,拥有丰富的图表绘制功能,可显示二维和三维的棒图、区域图、线形图、饼图等多种常用图表。近日我为了在双击图表的某个区域时将与该区域相对应的数据库的内容在DataGrid控件上显示出来,遇到了许多困难,最后用一个自定义的变量SelectSeries解决了问题,具体方法如下:设数据库名称为“学生信息”,有一Access表“学生成绩”,其内容为一个班学生的考试成绩,包括学号、姓名、成绩3个字段,成绩字段格式是字符型,值为“优”、“良”、“中”、“差”中的一个。 窗体Form1包括一个MSChart控件McScore,类型为二维饼图,用于显示每种成绩的学生数;一个ADO控件AdScore用于连接数据库;一个DataGrid控件DgScore用于以表格形式显示数据库内容。 工作过程为:双击饼图的某个区域,则DgScore显示相应成绩的学生名单。 代码如下: Option Explicit Dim SelectedSeries as Integer ′自定义变量 Dim Rs() as String ′提取记录集用的字符串数组 Private Sub Form_Load() ′设定DataGrid控件的数据源 DgScore.DataSource=″AdScore″ ′设定ADO控件的连接字串和初始的记录源,即显示内容 AdScore.ConnectString=″Provider=Microsoft.OLEDB.3.51;Persist_Security Info=False;Data Source=学生信息″ AdScore.RecordSource=″selet *from学生成绩order by成绩″ AdScore.Refresh ′预设好提取记录用的SQL语句 Rs(1)=″select*from学生成绩where成绩=″+Chr(34)+″优″+_Chr(34)+″order by成绩″ Rs(2)=″select *from学生成绩where成绩=″+Chr(34)+″良″+_Chr(34)+″order by成绩″ Rs(3)=″select *from学生成绩where成绩=″+Chr(34)+″中″+_Chr(34)+″order by 成绩″ Rs(4)=″select *from学生成绩where成绩=″+Chr(34)+″差″_Chr(34)+″order by成绩″ End Sub Private Sub McScore_SeriesSelected(Series as Integer,MouseFlags as _Integer,Cancel as Integer) SelectedSeries=Series End Sub Private Sub McScore_PointSelected(Series as Integer,DataPoint as_Integer,MouseFlags as Integer,Cancel as Integer) SelectedSeries=Series End Sub Private Sub McScore_Db1Click()

c#_ms_chart_控件使用方法汇总(附统计图)

c# ms chart 控件使用方法 第一个简单的chart:创建曲线图 chart1.Series.Clear(); Series series = new Series("Spline"); series.ChartType = SeriesChartType.Spline; series.BorderWidth = 3; series.ShadowOffset = 2; // Populate new series with data series.Points.AddY(67); series.Points.AddY(57); series.Points.AddY(83); series.Points.AddY(23); series.Points.AddY(70); series.Points.AddY(60); series.Points.AddY(90); series.Points.AddY(20); // Add series into the chart's series collection chart1.Series.Add(series); 同时显示2条曲线 // Populate series with random data Random random = new Random(); for (int pointIndex = 0; pointIndex < 10;pointIndex++) { Chart1.Series["Series1"].Points.AddY(random.Next(45, 95)); Chart1.Series["Series2"].Points.AddY(random.Next(5, 75)); } // Set series chart type Chart1.Series["Series1"].ChartType = SeriesChartType.Line; Chart1.Series["Series2"].ChartType = SeriesChartType.Spline;

VS使用TeeChart绘图控件

VS2010 使用TeeChart绘图控件- 之一- 控件和类的导入vs2010的用法和vc6有很大的不同,特别是在一些函数调用那里,当然。控件导入也是很不一样的 安装好控件后就可以在工程里加入teechart控件了 加入方法有如下几种: 1.添加Teechart控件 1.1 插入Teechart控件 1.1.1 插入控件 新建一个对话框工程,在对话框上点击鼠标右键,弹出的菜单里选择“插入ActiveX控件” 然后弹出的对话框里选择TeeChart控件

这时对话框就有TeeChart控件了 1.1.2 vs2010另外一种插入控件的方法

vs2010对话框设置的工具栏上就有许多控件了,若想把我们常用的控件也加到工具栏上以后使用就很方便了,下面说的这种方法就是把控件加入工具栏里。方便以后的调用 在工具栏的空白处点击右键,选择添加选项卡 这时vs就会新建一个选项卡,自己可以定义一个名称,这里命名为绘图控件 为选项卡添加项:在新建的选项卡的空白处点击右键,选择“选择项” 由于控件比较多,会耗费一定的时间打开这个选择项,别以为死机了,耐心等个几十秒吧

在打开的对话框中选择选择com标签,选择teechart控件

这样teechart控件就会在你的工具栏新加的选项里了,以后都会存在(我添加TeeChat的同时还把其他的一些控件添加进去了) 1.1.3 控件属性设置 双击控件进行相关设置 这里添加一个快速线图-Fast Line 若数据量特别大,可以在Series标签里的Format的Draw all选项去掉

在Chart标签里还可以设置坐标轴的名称属性等,这里先不详细讲述属性的设置2.为控件添加类 vs2010与vc6不一样,vs2010的控件对应的类添加相对比vc6麻烦 这里就对刚刚加入的TeeChart控件加入相关的类 2.1 添加TypeLib的mfc类 (1)选择vs菜单“项目”-“添加类”(注意这时类视图树形控件选中最顶端的父节点) (2)添加TypeLib的mfc类

MSChart控件教程

MSChart控件 这些内容是在学习过程中进行的整理,由于感到书籍资料或软件帮助中有时让人很不容易理解,特制作这个教程,以方便其他朋友学习,从新学习此控件的人的角度 来描述相应的属性,相信也能让跟我一样程度的人更容易理解,可能在学习的过程中 对某些属性与方法有理解不正确,请各位指正。 附录:

1、AllowDynamicRotation 返回目录 作用:返回或设置是否可旋转图表 注:需要图表的ChartType是3d类型才可以,当AllowDynamicRotation=True时,在图表中可按住ctrl+鼠标左键旋转图表。 示例: F列代码在窗体加载时将MSChartl设置为3d柱形图,并允许按住ctrl+鼠标左键旋转。(窗体上放一个MSChart控件) Private Sub Form_Load() With MSChart1 .chartType = VtChChartType3dBar '类型为3d柱形图,类形常数详见附录.AllowD yn amicRotati on = True '允许旋转 End With End Sub 口Forniil A ■

AllowDynamicRotation 值: 下列代码将以对话框的形式返回上面示例的 MsgBox MSChart1.AllowDy namicRotati on True

2、ChartData 返回目录 注:书中及软件帮助文档中说到数组需要变体型数值,是指如果要将数组第一个元素 作为标题,其他作为数据,那个这个数组既有字符又有数字,那么就需要一个变 体形。如果数组中并不包含标题(或是之后使用属性来赋于标题) ,那么数组是可以定义类形的,个人建议先给定数组类型,之后再使用属性来设置标题。 作用:设置:将一个数组的数据作表图表的显示数据 返回:将图表数据赋给一个数组 示例:将数组元素作为图表的显示数据 制作一个1行6列的的图表(数组的维代表图表的行,每维的元素代表列) Private Sub Form_Load() Dim 一维数组(1 To 6) '为了表示得更清楚,我们采取逐个赋值的方法 一维数组(1)= 1 一维数组(2) = 2 一维数组(3) = 3 一维数组(4) = 4 一维数组(5) = 5 一维数组(6) = 6 With MSChartl .chartType = VtChChartType2dBar '类型为3d 柱形图.ChartData = 一维数组() End With End Sub

mschart控件使用详解

一.数据源 说到绘制图表,可能很多人的第一反应除了是图表呈现的方式外,更关心的便是数据如何添加,记得在很多年前,哪时要绘制一个数据曲线图,一直找不到好的呈现方式,后来使用了SVG的绘图模式,不过在添加数据的时候可谓吃尽了苦头,毕竟,SVG只是一种描述语言,要动态的实现一个图表的绘制,是非常困难的.对于微软的图表控件,数据添加是一件很简单的方式,它支持多种数据添加方式,如: ·可以在图表的设计界面,在属性设置窗口中的Series属性下的Points中添加需要的数据. ·可以在图表的设计界面中,在属性中绑定一个数据源. ·可以在后台代码中,动态添加数据. ·可以在后台代码中设置一个或多个数据源,直接绑定到图表中. 在此处,我只着重讲解一下第3,4两点.对于第3点,相对来说比较简单,在后台代码中,找到要添加代码的Series,通过它下面Points的Add、AddXY、AddY等方法,即可以实现数据的添加.例如: 1. double t; 2. for(t = 0; t <= (2.5 * Math.PI); t += Math.PI/6) 3. { 4. double ch1 = Math.Sin(t); 5. double ch2 = Math.Sin(t-Math.PI/2); 6. Chart1.Series["Channel 1"].Points.AddXY(t, ch1);

7. Chart1.Series["Channel 2"].Points.AddXY(t, ch2); 8. } 复制代码 注:代码摘自微软的例子,上例中,Chart1为图表的名字,Channel 1、Channel 2分别表示两个Series数据序列) 二.绑定数据 先来看看图表控件都支持什么类型的数据绑定,根据官方文档的说法,只要是实现了IEnumerable接口的数据类型,都可以绑定到图表控件中,例如:DataView, DataReader, DataSet, DataRow, DataColumn, Array, List, SqlCommand, OleDbCommand, SqlDataAdapter, 及OleDbDataAdapter对象。 对于开发来说,最常用的还是DataView、DataReader、DataSet、DataRow、Array、List这几种类型了,有几点需要注意一下: ·图表控件支持多数据源的绑定,例如:X轴绑定一个数据集ds1,Y轴可以绑定另一个数据集ds2,当然也可以是X轴绑定到一个List数据对象,Y轴绑定到一个DataView对象等等。 ·图表控件的绑定方式一般有两种,常规绑定及交差表的绑定。 ·图表控件的Y轴数据,支持一次绑定多个值,以绘制时间、区域、使用量等之类的图形。 绑定数据的流程如下: 2008111015142478.png (44.03 K) 2008-11-10 22:19:03

C# MSChart图表控件使用介绍

C# MSChart 图表控件使用介绍 (2011-08-23 13:05:11) 转载 ▼ 标签: c mschart 图表 chart 使用介绍 分类: MSChart 图表 1、安装MSChart 控件 VS2008在默认下是没有MSChart 控件,所以我们需要下载安装。 Chart For vs2008安装需要下载4个文件: (1)dotnetfx35setup.exe (2)MSChart_VisualStudioAddOn.exe (3)MSChartLP_chs.exe (4)MSChart.exe https://www.sodocs.net/doc/4217066367.html,/u/ish 然后分别安装,安装结束之后打开VS2008就可以在工具箱中看到Chart 图表控件: 2、添加MSChart 控件 为WinForm 窗体添加Chart 控件

3、设置MSChart控件的属性 设置MSChart控件属性方法两种:1、代码中设置属性;2、属性表设置属性 1、代码中设置属性 步骤1:添加引用 using System.Windows.Forms.DataVisualization.Charting; 步骤2:写入代码 namespace MSChart { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { ////////////////////ChartArea1属性设置/////////////////////////// //设置网格的颜色 chart1.ChartAreas["ChartArea1"].AxisX.MajorGrid.LineColor = Color.LightGray; chart1.ChartAreas["ChartArea1"].AxisY.MajorGrid.LineColor = Color.LightGray; //设置坐标轴名称 chart1.ChartAreas["ChartArea1"].AxisX.Title = "随机数"; chart1.ChartAreas["ChartArea1"].AxisY.Title = "数值";

用Chart控件绘制动态图表

用Chart控件绘制动态图表 ---- 进行程序设计时,选用一个合适的ActiveX控件,有时可大大减少编程工作量。ActiveX 控件(又称OCX)基于COM技术,作为独立的软件模块,它可以在任何程序设计语言中插入使用。本文仅以VC++为例说明Chart控件的使用。 ---- Chart控件指Mschart.ocx(5.0版)或Mschrt20.ocx(6.0 版),是Visual Studio自带的ActiveX控件之一,其属性、事件很多,功能非常强大,可实现柱状直方图、曲线走势图、饼状比例图等,甚至可以是混合图表,可以是二维或三维图表,可以带或不带坐标系,可以自由配置各条目的颜色、字体等等。 一安装和使用Chart控件 ----在用到Chart控件的项目中安装该控件:从Project->Add to Project ->Components And Controls->Registered Active Xcontrols,选择Chart控件,则ClassWizard会生成相应的C++类,其中类CMSChart是由CWnd派生来的,它是Chart 控件的主要类,其他的类全部是由COleDispatchDriver派生来,控制控件中的相应对象,完成各部分相关功能,如CvcAxis类是实现坐标轴相关功能的源代码。同时在项目的控件工具箱上会出现代表Chart控件的按钮,使用时把Chart控件按钮从工具箱拖到对话框中,调整大小即可。 ----Chart控件至少有45个属性、9个方法、49个事件,在这里就不一一列举了。 ---- 在设计中,我们可以在主要属性页里修改各属性的属性值:右击对话框窗口中的Chart控件,选择“Properties”菜单项,就会弹出主要属性页对话框,对其中各属性值进行设置。有些属性在主要属性页里没有列出,只能编程修改。另外要动态绘制图表,必须掌握对控件的编程控制。 ---- 首先在对话框类中定义控件变量,以便编程时操纵控件。如对话框类定义如下: class CAbcDlg : public CDialog{ public: CAbcDlg(CWnd*pParent = NULL); //{{AFX_DA TA(CAbcDlg) enum { IDD = IDD_ABC_DIALOG }; CMSChart m_Chart; //}}AFX_DA TA ...... }; ----ActiveX控件的属性和方法在控件内部对应唯一一个整数索引值,编程时可以通过索引来设置或获取控件的属性值,也可以通过调用控件的C++类(在这里就是CMSChart)的成员函数设置或获取控件的属性值及调用控件的方法。例如: ----在CMSChart类实现中有如下代码: CString CMSChart::GetData(){

MSChart控件

一、在工程中加入 mschart 菜单->Project->Add To Project->Components and Controls->Registered ActiveX Controls->Microsoft Chart Control, version 6.0 (OLEDB) 二、在CDemoView中加入:CMSChart m_Chart 三、创建及设置m_Chart 3.1 在 CDemoView::OnCreate 中创建CMSChart // CDemoView::OnCreate() CRect rc; GetClientRect(&rc); if(!m_Chart.Create("mschart", WS_CHILD| WS_VISIBLE, rc, this, 10)) return -1; 3.2 在 CDemoView::OnSize 中调整 m_Chart 的大小,使之能随窗口大小变化而变化 // CDemoView::OnSize if( m_Chart.GetSafeHwnd() ) m_Chart.MoveWindow( 0, 0, cx, cy ); 3.3 设置 m_Chart void CDemoView::InitChart() { // 设置标题 m_Chart.SetTitleText("mschart 示例"); // 下面两句改变背景色 m_Chart.GetBackdrop().GetFill().SetStyle(1); m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255); // 显示图例 m_Chart.SetShowLegend(TRUE); m_Chart.SetColumn(1); m_Chart.SetColumnLabel((LPCTSTR)"1号机"); m_Chart.SetColumn(2); m_Chart.SetColumnLabel((LPCTSTR)"2号机"); m_Chart.SetColumn(3); m_Chart.SetColumnLabel((LPCTSTR)"3号机"); // 栈模式 // m_Chart.SetStacking(TRUE); // Y轴设置 VARIANT var; m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetAuto(FALSE); // 不自动标注Y轴刻度 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMaximum(100); // Y轴最大刻度 m_Chart.GetPlot().GetAxis(1,var).GetValueScale().SetMinimum(0); // Y 轴最小刻度

Dundas Chart控件的使用总结

Dundas Chart控件的使用总结 前段时间因为工作需要接触到Dundas Chart 控件,研究了2周时间,大体能实现需要的功能,现在对其做个大体的总结,希望能把自己理解到的地方都能够总结到位,一是方便大家上手,而来也是提高一下自身的学习到总结再到学习的一个循环学习方法吧,再次提高下本人的表达水平,不多说了,进入课题。 1.首先要拖拽一个Chart控件到设计区,在代码编写区加上引用命名空间using Dun das.Charting.WebControl; 2.每个Chart分为ChartArea区域,Sieres,Legend,Axis几个部分,都可以设置相应的属性,可以在属性编辑框中修改,也可以通过修改代码来实现; 3.绑定数据部分,可以通过Points.DataBindXY(X[],y[]); 代码 using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Dundas.Charting.WebControl; using System.Drawing; public partial class TestChart : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { databindXY(); ControlSet(); //databindXY(); } private void ControlSet() { //设置Chart1的相关属性 Chart1.BackGradientEndColor = Color.White; Chart1.BorderLineColor = Color.White; Chart1.BorderLineWidth = 0; Chart1.BorderSkin.FrameBackColor = Color.MediumTurquoise;

图表绘制控件MSCHART的使用方法1

VisualBasic中ActiveX控件MSChart的使用方法* 依皮提哈尔·穆罕买提,那斯尔江·土尔逊 (新疆大学数学与系统科学学院,乌鲁木齐,830046) 热依曼·吐尔逊 (新疆大学信息工程学院,乌鲁木齐,830046) 摘要:本文首先介绍了VisualBasic(简称VB)中MSChart控件的使用方法,然后通过简单的例子详细介绍了利用MSChart控件绘制Excel数据源图表的方法。 关键词:VisualBasic;MSChart控件;MicrosoftExcel数据表;图表;数据库 The Methods of Using MSChart Control Based on VB Iptihar.Muhammat,Nasirjan.Tursun (Mathematics and Systematic Science Institude of Xinjiang University,Urumqi,Xinjiang,830046) Reyima.Tursun (Information Science and Engineering Institude of Xinjiang University, Urumqi,Xinjiang,830046) Abstract:This article discusses how to use the MSChart control and how that is used in the VB project to drawing Microsoft?Excel charts. KeyWords:MSChart Control;Chartdata;Mirosoft Excel Sheets;Chart;Database 1.引言 Visual Basic中的MSChart控件是一个功能强大的高级图表工具,拥有丰富的图表绘制功能,用它来可以显示二维和三维的棒图、区域图、线形图、饼图等多种常用图表。使用MSChart控件可以按照一定的规范将数据以图表的形式绘制出来。可以通过在控件的属性页中设置数据来创建图表,也可以从其它数据源,如Microsoft Excel和Microsof Access 的电子数据表中检索出要绘制的数据。本文介绍MSChart控件使用方法的同时,主要讨论用MSChart控件绘制Excel数据源图表的实现过程。 2.使用数组和MSChart控件属性绘制图表 2.1添加MSChart控件并调整其属性 (1)先通过“工程”菜单中的“部件”命令,在控件箱里,添加Microsoft Chart Control6.0 (OLEDB)(简称MSChart) (2)MSChart控件拖动到窗体里,生成初始图表 (3)快捷菜单中的属性命令打开属性页对话框,在该对话狂里可以选择图表类型(在代码中使用ChartType属性),也可以设置图表及其X、Y轴的标题,框架等各种属性2.2使用数组和ChartData属性绘制图表 绘制图表最简单的方法就是创建数字型的数组,然后将ChartData属性设为该数组。下面介绍简单的单系列图表和复杂的多系列图表的创建方法: ------------------------------------------------------------------------------- *新疆大学校基金”应用软件程序设计”重点课程建设项目资助1

微软图表控件MsChart使用指南

微软图表控件MsChart使用指南 昨天在网上看到了微软发布了.NET 3.5框架下的图表控件,第一时间抓下来看了一下,发觉功能很强劲,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显,只能在最新的开发环境中使用,需要.Net 3.5 Sp1以及VS 2008的开发环境。 下面是下载地址: mework 3.5)– 1.包含英文版,中文版。上面提供的链接是中文版的,可以更 改为英文版。 2.语言包:Microsoft Chart Controls for Microsoft .NET Framework 3.5 Language Pack 3.Microsoft .NET Framework 3.5 的Microsoft 图表控 件的语言包,包含23中语言。 4.Microsoft Chart Controls Add-on for Microsoft Visu al Studio 2008–

这个只有英文的,没找到中文的。 5.文档(Microsoft Chart Controls for .NET Framewor k Documentation)– 这个只有英文的,没找到中文的。 6.WinForm 和https://www.sodocs.net/doc/4217066367.html,的例子(Samples Environment for Microsoft Chart Controls)– 这个只有英文的,没找到英文的。 7.Demo 下载:https://www.sodocs.net/doc/4217066367.html,/msch art 下了它的示例程序后,运行了一下,非常的强大,可以支持各种各样的图形显示,常见的:点状图、饼图、柱状图、曲线图、面积图、排列图等等,同时也支持3D样式的图表显示,不过我觉得最有用的功能还是支持图形上各个点的属性操作,它可以定义图形上各个点、标签、图形的提示信息(Tooltip)以及超级链接、Jav ascript动作等,而不是像其它图形类库仅生成一幅图片而已,通过这些,加上微软自己的Ajax框架,可以建立一个可以互动的图形统计报表了。 一。安装

大白话C#--chartControl控件连接SQL Server数据库实现饼状图1

大白话C#—chartControl控件连接 SQL Server数据库实现饼状图 大白话系列宗旨:打破自身基础高低的壁垒,用最简单白话的语言,让最低基础的童鞋也能轻松编程。 项目描述:chartControl是VS中DEV插件下的一个控件,可以实现在界面中的图表功能,本项目旨在通过chartControl控件与数据库动态连接,从而实现将数据库中的数据对应显示在界面的图表中。本示例使用SQL Server数据库,最终实现的是饼状图。 环境:VS2010、DEV11.1、SQL Server2008 详细步骤(完整代码附在文档最后): 一、建立数据库 1、打开SQL Server 2008下的SQL Server Management Studio,连接进入主界面。

2、在主界面左侧找到“数据库”文件夹,右键点击“新建数据库”,并对数据库进行命名,此处命名为“Test”。 3、点击“确定”,即建立了一个名为“Test”的数据库。 二、新建数据表 1、在主界面左侧的“Test”文件夹下找到“表”文件夹,右键点击,选择“新建表”,此时弹出窗口对该表命名,此处命名为“dbo.Table”

2、在弹出的界面中给新建表添加列名及其类型,并保存。范例如图: 3、在左侧找到“表”文件夹下“dbo.Table”,右键点击,选择“编辑前200行”,在弹出的窗口内对该数据表进行数据填充,就是对之前新建表里的各列填充数据。范例如图:

三、新建C #项目 1、找到并打开VS2010软件,新建项目。

2、在弹出的窗口中左侧选择Visual C#下的Windows,然后在右侧选择“Windows窗体应用程序”,然后在下侧修改项目名称。 点击确定,即创建了一个窗体。

Chart控件的基本操作

【C#】Chart控件的最基本操作 笔记本:跬步 创建时间:2016/3/4 19:27更新时间:2016/10/18 9:28作者:苏畅 1、Chart绑定数据的格式 最简单的方法是用 List 分别定义X和Y轴 然后绑定数据到chart里,代码如下: chart1.Series["水位"].Points.DataBindXY(distance, level); chart1.Series["水位"].ChartType =SeriesChartType.Line; 其中SeriesChartType是指系列的类型,可以选择柱状图、线等 2、在Chart属性里,找到series,点击... 然后定义需要的series系列

3、在Chart属性里,找到ChartAreass,点击...然后打开ChartArea1的属性,找到Axes,点击...

然后就可以根据需要设置坐标轴格式了,包括坐标轴的标题、最大值,最小值,对数坐标等等。 附代码如下: string result =Form1.result; string[] line = result.Split('\n'); List distance =new List();//用??来???绑???定??chart List level =new List(); List distance1 =new List(); List lowpoint =new List(); for(int k = 0; k < line.Length - 1; k++) { string[] ss = line[k + 1].Split('\t');

mschart控件使用详解

m s c h a r t控件使用详解 一.数据源 说到绘制图表,可能很多人的第一反应除了是图表呈现的方式外,更关心的便是数据如何添加,记得在很多年前,哪时要绘制一个数据曲线图,一直找不到好的呈现方式,后来使用了SVG的绘图模式,不过在添加数据的时候可谓吃尽了苦头,毕竟,SVG 只是一种描述语言,要动态的实现一个图表的绘制,是非常困难的.对于微软的图表控件,数据添加是一件很简单的方式,它支持多种数据添加方式,如: ·可以在图表的设计界面,在属性设置窗口中的Series属性下的Points中添加需要的数据. ·可以在图表的设计界面中,在属性中绑定一个数据源. ·可以在后台代码中,动态添加数据. ·可以在后台代码中设置一个或多个数据源,直接绑定到图表中. 在此处,我只着重讲解一下第3,4两点.对于第3点,相对来说比较简单,在后台代码中,找到要添加代码的Series,通过它下面Points的Add、AddXY、AddY等方法,即可以实现数据的添加.例如: 1.doublet; Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

2.for(t=0;t<=*;t+=6) 3.{ 4.doublech1=(t); 5.doublech2=2); 6.["Channel1"].(t,ch1); 7.["Channel2"].(t,ch2); 8.} 复制代码 注:代码摘自微软的例子,上例中,Chart1为图表的名字,Channel1、Channel2分别表示两个Series数据序列) 二.绑定数据 先来看看图表控件都支持什么类型的数据绑定,根据官方文档的说法,只要是实现了IEnumerable接口的数据类型,都可以绑定到图表控件中,例如:DataView,DataReader,DataSet,DataRow,DataColumn,Array,List,SqlComman d,OleDbCommand,SqlDataAdapter,及OleDbDataAdapter对象。 对于开发来说,最常用的还是DataView、DataReader、DataSet、DataRow、Array、List这几种类型了,有几点需要注意一下: ·图表控件支持多数据源的绑定,例如:X轴绑定一个数据集ds1,Y轴可以绑定另一个数据集ds2,当然也可以是X轴绑定到一个List数据对象,Y轴绑定到一个DataView对象等等。 ·图表控件的绑定方式一般有两种,常规绑定及交差表的绑定。 ·图表控件的Y轴数据,支持一次绑定多个值,以绘制时间、区域、使用量等之类的图形。 绑定数据的流程如下: 2008-11-1022:19:03 大意是,绑定数据里面是否有分组数据需要绑定,如果有,则调用交叉表绑定的方法。否则判断是否时绑定X轴和Y轴(包括标签、超链接、图例文字等自定义属性),如果是,则调用方法进行绑定操作。再判断是否有不同的X轴或Y轴数

微软图表控件MsChart使用初探

微软图表控件MsChart使用初探 分类:NET2009-09-02 11:36 微软发布了.NET 3.5框架下的图表控件,基本上能想到的图表都可以使用它绘制出来,给图形统计和报表图形显示提供了很好的解决办法,同时支持Web和WinForm两种方式,不过缺点也比较明显,只能在最新的开发环境中使用,需要.Net 3.5 Sp1以及VS 2008的开发环境。 下面是下载地址: 控件:Microsoft .NET Framework 3.5 的Microsoft 图表控件(Microsoft Chart Controls for Mi crosoft .NET Framework 3.5)– 1.包含英文版,中文版。上面提供的链接是中文版的,可以更改为英文版。 2.语言包:Microsoft Chart Controls for Microsoft .NET Framework 3.5 Language Pac k 3.Microsoft .NET Framework 3.5 的Microsoft 图表控件的语言包,包含23中语 言。 4.Microsoft Chart Controls Add-on for Microsoft Visual Studio 2008– 这个只有英文的,没找到中文的。 5.文档(Microsoft Chart Controls for .NET Framework Documentation)– 这个只有英文的,没找到中文的。 6.WinForm 和https://www.sodocs.net/doc/4217066367.html,的例子(Samples Environment for Microsoft Chart Contr ols)– 这个只有英文的,没找到英文的。 7.Demo 下载:https://www.sodocs.net/doc/4217066367.html,/mschart 下了它的示例程序后,运行了一下,非常的强大,可以支持各种各样的图形显示,常见的:点状图、饼图、柱状图、曲线图、面积图、排列图等等,同时也支持3D样式的图表显示,不过我觉得最有用的功能还是支持图形上各个点的属性操作,它可以定义图形上各个点、标签、图形的提示信息(Tooltip)以及超级链接、Javascript动作等,而不是像其它图形类库仅生成一幅图片而已,通过这些,加上微软自己的Ajax框架,可以建立一个可以互动的图形统计报表了。 一。安装 控件的安装相对比较简单,下载完后,先执行“MSChart.exe”程序,它会自动检测你的环境,安装到系统目录中去,如果要在VS 2008环境中直接使用,那么需要安装For Vs2008的插件,MSChart_VisualStudioAddOn.exe,还有一个中文语言包MSChartLP_chs.exe。

vs2010chart控件使用方法

protected void Page_Load(object sender, EventArgs e) { DataTable dt = default(DataTable); dt = CreateDataTable(); //设置图表的数据源 Chart1.DataSource = dt; //设置图表Y轴对应项 Chart1.Series[0].YValueMembers = "Volume1"; Chart1.Series[1].YValueMembers = "Volume2"; //设置图表X轴对应项 Chart1.Series[0].XValueMember = "Date"; //绑定数据 Chart1.DataBind(); } private DataTable CreateDataTable() { //Create a DataTable as the data source of the Chart control DataTable dt = new DataTable(); //Add three columns to the DataTable dt.Columns.Add("Date"); dt.Columns.Add("Volume1"); dt.Columns.Add("Volume2"); DataRow dr; //Add rows to the table which contains some random data for demonstration dr = dt.NewRow(); dr["Date"] = "Jan"; dr["Volume1"] = 3731; dr["Volume2"] = 4101; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Date"] = "Feb"; dr["Volume1"] = 6024; dr["Volume2"] = 4324; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Date"] = "Mar";

相关主题