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

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

Ng ng Hin Hc Vin Hi Qun 2011

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.

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);

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;

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); }

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 using using using using using using using System; System.Collections.Generic; System.ComponentModel; System.Data; System.Drawing; System.Linq; System.Text; System.Windows.Forms;

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; }

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