You are on page 1of 12

Ng ng Hin Hc Vin Hi Qun 2011

HNG DN V TH VI
VISUAL STUDIO C# 2008
Hm nay, ngy 05/08/2011 ng l 1 ngy bun nh ch cht ( con ch nh bn cnh
b nu d cy ^_^ ), li ngi vit TUT cho anh em engineer mi vo ngh.

1. Gii thiu
Trong TUT u ti hng dn cc bn giao tip COM vi vi iu khin. Giao
tip nh vy coi nh l xong ri. Nhng m chng ta thy y nhn c d liu
tt ri nhng phi v c Graph th mi gii quyt c bi ton.
Trong 1 ln tnh c thy 1 ng anh v th vi VB6 nhn thy m thm c ngh
ng ny tht l P-r-fc-sn-n. Nhng sau khi tm hiu th ha ra ng ta si
phn mm v teachar g ( hic khng nh! ). Ti mi mon men ln mng tm
cho C# th c cng kh nhiu cng c mnh m cho v th, nhn rt chuyn
nghip c nh l dng Excel v y. K n l c ZedGraph, Component one
Trong khun kh ti liu ny ti s c gng hng dn chi tit v th vi
ZedGraph, tuy khng p v pro bng Component One nhng l cng c mnh v
code nn rt d lm ch code ca mnh.
Hi vng ti liu s gip ch c anh em mi vo ngh chi vi iu khin v tp
code vi C#
2. To Project

- File / New / Project.


- V t tn cho n

1
Ng ng Hin Hc Vin Hi Qun 2011

- s dng c control ZedGraph chng ta phi add n vo Toolbox bng cch

Nhp phi chut vo


khu vc trng, chn
Choose Items.

- Hin ra 1 ca s mi v bn phi nhn Brownse ch ra ng dn n


ZedGraph.dll
2
Ng ng Hin Hc Vin Hi Qun 2011

3
Ng ng Hin Hc Vin Hi Qun 2011

- Khi ToolBox c Control nh bn di l OK ri.

Em n y, ch
vic ko th vo
Form l OK

- Sau khi ko th v thm cc button c nh hnh bn di.

- Vy l phn giao din l n ri, by gi ko thm timer ra, mc ch to thi


gian chy trong phn th.

4
Ng ng Hin Hc Vin Hi Qun 2011

Timer th hin y l c.

3. Vit CODE
- Trc ht thm th vin vo
// ch : Khai bo th vin ny
using ZedGraph;

- Khai bo trc Form1


// Khai bo 1 bin dng cho timer, chy ct thi gian tnh bng ms

int tickStart = 0;

public Form1()
{
InitializeComponent();
}

- p vo tiu ly s kin Load v xem code Form1_Load bn di.


private void Form1_Load(object sender, EventArgs e)
{
// khi khi ng s c chy
GraphPane myPane = zedGraphControl1.GraphPane; // Khai bo sa
dng Graph loi GraphPane;
// Cc thng tin cho th ca mnh
myPane.Title.Text = "y l title trn cng, bn thay i cho ph
hp vi chng trnh";
myPane.XAxis.Title.Text = "Thi gian ct X";
myPane.YAxis.Title.Text = "Tiu ct Y";
// nh ngha list v th. cc bn hiu r c ch lm
vic y khai bo 2 list im <=> 2 ng th
RollingPointPairList list1 = new RollingPointPairList(1200);

5
Ng ng Hin Hc Vin Hi Qun 2011
// y s dng list vi 1200 im (c th thm nhiu liu ti
y)
RollingPointPairList list2 = new RollingPointPairList( 1200 );
// dng di l nh ngha curve v.
LineItem curve1 = myPane.AddCurve("ng 1", list1, Color.Red,
SymbolType.None); // Color mu , c trng cho ng 1
// SymbolType l kiu biu th th : im, ng trn, tam
gic ....
LineItem curve2 = myPane.AddCurve("ng 2", list2, Color.Blue,
SymbolType.None); // Color mu Xanh, c trng cho ng 2

// v d khong cch l 50ms 1 ln


timer1.Interval = 50;
//timer1.Enabled = true; // Kch hot cho timer1
//timer1.Start(); // Chy Timer1

// nh hin th cho trc thi gian (Trc X)


myPane.XAxis.Scale.Min = 0; // Min = 0;
myPane.XAxis.Scale.Max = 30; // M = 30;
myPane.XAxis.Scale.MinorStep = 1; // n v chia nh nht 1
myPane.XAxis.Scale.MajorStep = 5; // n v chia ln 5

// Gi hm xc nh c trc
zedGraphControl1.AxisChange();

// Khi ng timer v v tr ban u


tickStart = Environment.TickCount;
}

// tin cho vic s dng chng ta s xy dng 1 hm draw phc v cho vic
v th

public void draw(double setpoint1, double setpoint2) // v d ny


chng ta c 2 ng
{

if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
return;
// Kim tra vic khi to cc ng curve
// a v im xut pht
LineItem curve1 = zedGraphControl1.GraphPane.CurveList[0] as
LineItem;
LineItem curve2 = zedGraphControl1.GraphPane.CurveList[1] as
LineItem;
if (curve1 == null)
return;
if (curve2 == null)
return;

// list cha cc im.


// Get the PointPairList
IPointListEdit list1 = curve1.Points as IPointListEdit;
IPointListEdit list2 = curve2.Points as IPointListEdit;

6
Ng ng Hin Hc Vin Hi Qun 2011
if (list1 == null)
return;
if (list2 == null)
return;

// Time c tnh bng ms


double time = (Environment.TickCount - tickStart) / 1000.0;

// Tnh ton gi tr hin th

// Mun hin th ci g th ch vic thay vo setpointx


list1.Add(time, setpoint1); // y chnh l hm hin th d liu
ca mnh ln th
// list2.Add(time, setpoint2); // y chnh l hm hin th d
liu ca mnh ln th
// Ko v setpoint2 m th v th hnh sin vi 3 seconds per
cycle
list2.Add(time, Math.Sin(2.0 * Math.PI * time / 3.0));
// on chng trnh thc hin v th
Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
//xScale.Max = time + xScale.MajorStep;
// xScale.Min = xScale.Max - 30.0; // Timer chy qua 30 s t
ng dch chuyn tnh tin sang tri
// Nu ko mun dch chuyn m chy bt u t 0 th :
xScale.Min = 0;
if (button3.Text == "COMPACT")
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}
else
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = 0;
}
}

// V th
zedGraphControl1.AxisChange();
// Force a redraw
zedGraphControl1.Invalidate();
}

gi hm v chng ta s kch hot cho Timer1 chy, p vo Timer1 ly s kin,


sau vit code nh code tham kho bn di.
private void timer1_Tick(object sender, EventArgs e)
{
draw(5,20);
}

7
Ng ng Hin Hc Vin Hi Qun 2011

- cc bn hiu hn v c ch lm vic, ti thm cc Button iu khin mc


ch ca n l : Cho m Timer bt u v th bng START, cho hin th 2
dng chy thi gian bng button COMPACT v thot chng trnh bng Exit

Cc bn c th tham kho code mu.


int check = 0; // cho khi nhn Start l s bt u t im 0
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "START")
{
timer1.Enabled = true;
button1.Text = "STOP";
// Khi ng timer v v tr ban u
if (check == 0)
{
tickStart = Environment.TickCount;
check = 1;
}
}
else
{
timer1.Enabled = false;
button1.Text = "START";
}
}

private void button2_Click(object sender, EventArgs e)


{
this.Close();
}

private void button3_Click(object sender, EventArgs e)


{
if (button3.Text == "COMPACT") button3.Text = "SROLL";
else button3.Text = "COMPACT";
}

private void tcGiToolStripMenuItem_Click(object sender, EventArgs e)


{
Form2 frm = new Form2();
frm.ShowDialog();
}

4. Full CODE tham kho


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

8
Ng ng Hin Hc Vin Hi Qun 2011
// ch : Khai bo th vin ny
using ZedGraph;

namespace DOTHI_HIENCLUBVN
{
public partial class Form1 : Form
{
// Khai bo 1 bin dng cho timer, chy ct thi gian tnh bng ms
int tickStart = 0;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)


{
// khi khi ng s c chy
GraphPane myPane = zedGraphControl1.GraphPane; // Khai bo sa
dng Graph loi GraphPane;
// Cc thng tin cho th ca mnh
myPane.Title.Text = "y l title trn cng, bn thay i cho ph
hp vi chng trnh";
myPane.XAxis.Title.Text = "Thi gian ct X";
myPane.YAxis.Title.Text = "Tiu ct Y";
// nh ngha list v th. cc bn hiu r c ch lm
vic y khai bo 2 list im <=> 2 ng th
RollingPointPairList list1 = new RollingPointPairList(1200);
// y s dng list vi 1200 im (c th thm nhiu liu ti
y)
RollingPointPairList list2 = new RollingPointPairList( 1200 );
// dng di l nh ngha curve v.
LineItem curve1 = myPane.AddCurve("ng 1", list1, Color.Red,
SymbolType.None); // Color mu , c trng cho ng 1
// SymbolType l kiu biu th th : im, ng trn, tam
gic ....
LineItem curve2 = myPane.AddCurve("ng 2", list2, Color.Blue,
SymbolType.None); // Color mu Xanh, c trng cho ng 2

// v d khong cch l 50ms 1 ln


timer1.Interval = 50;
//timer1.Enabled = true; // Kch hot cho timer1
//timer1.Start(); // Chy Timer1

// nh hin th cho trc thi gian (Trc X)


myPane.XAxis.Scale.Min = 0; // Min = 0;
myPane.XAxis.Scale.Max = 30; // M = 30;
myPane.XAxis.Scale.MinorStep = 1; // n v chia nh nht 1
myPane.XAxis.Scale.MajorStep = 5; // n v chia ln 5

// Gi hm xc nh c trc
zedGraphControl1.AxisChange();

// Khi ng timer v v tr ban u


tickStart = Environment.TickCount;
}

9
Ng ng Hin Hc Vin Hi Qun 2011
// tin cho vic s dng chng ta s xy dng 1 hm draw phc v
cho vic v th
public void draw(double setpoint1, double setpoint2) // v d ny
chng ta c 2 ng
{

if (zedGraphControl1.GraphPane.CurveList.Count <= 0)
return;
// Kim tra vic khi to cc ng curve
// a v im xut pht
LineItem curve1 = zedGraphControl1.GraphPane.CurveList[0] as LineItem;
LineItem curve2 = zedGraphControl1.GraphPane.CurveList[1] as LineItem;
if (curve1 == null)
return;
if (curve2 == null)
return;

// list cha cc im.


// Get the PointPairList
IPointListEdit list1 = curve1.Points as IPointListEdit;
IPointListEdit list2 = curve2.Points as IPointListEdit;

if (list1 == null)
return;
if (list2 == null)
return;

// Time c tnh bng ms


double time = (Environment.TickCount - tickStart) / 1000.0;

// Tnh ton gi tr hin th

// Mun hin th ci g th ch vic thay vo setpointx


list1.Add(time, setpoint1); // y chnh l hm hin th d liu
ca mnh ln th
// list2.Add(time, setpoint2); // y chnh l hm hin th d
liu ca mnh ln th
// Ko v setpoint2 m th v th hnh sin vi 3 seconds per
cycle
list2.Add(time, Math.Sin(2.0 * Math.PI * time / 3.0));
// on chng trnh thc hin v th
Scale xScale = zedGraphControl1.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
//xScale.Max = time + xScale.MajorStep;
// xScale.Min = xScale.Max - 30.0; // Timer chy qua 30 s t
ng dch chuyn tnh tin sang tri
// Nu ko mun dch chuyn m chy bt u t 0 th :
xScale.Min = 0;
if (button3.Text == "COMPACT")
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}
else
{

10
Ng ng Hin Hc Vin Hi Qun 2011
xScale.Max = time + xScale.MajorStep;
xScale.Min = 0;
}
}

// V th
zedGraphControl1.AxisChange();
// Force a redraw
zedGraphControl1.Invalidate();
}

private void timer1_Tick(object sender, EventArgs e)


{
draw(5,20);
}
int check = 0; // cho khi nhn Start l s bt u t im 0
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "START")
{
timer1.Enabled = true;
button1.Text = "STOP";
// Khi ng timer v v tr ban u
if (check == 0) { tickStart = Environment.TickCount; check = 1; }
}
else
{
timer1.Enabled = false;
button1.Text = "START";
}
}

private void button2_Click(object sender, EventArgs e)


{
this.Close();
}

private void button3_Click(object sender, EventArgs e)


{
if (button3.Text == "COMPACT") button3.Text = "SROLL";
else button3.Text = "COMPACT";
}

private void tcGiToolStripMenuItem_Click(object sender, EventArgs e)


{
Form2 frm = new Form2();
frm.ShowDialog();
}
}
}

5. Mt s hnh nh v giao din

11
Ng ng Hin Hc Vin Hi Qun 2011

Hnh trn l thi gian chy ( th dch tnh tin), hnh bn di bt u t 0 (dn li)

12

You might also like