本文主要是Mschart應用之曲線圖表spline,實現6個模擬數據的圖表,其中數據源X軸為當前系統時間,Y軸是由隨機函數產生的不同范圍的隨機數。
首先是自定義一個數據表,然后產生的數據添加到該數據表中,最后通過chart1.Series[0].Points.AddXY()函數把數據繪制到圖表上。
在開始運行界面主要是通過Timer函數不斷調用繪制圖表,具體圖表繪制函數在StartRun類之中,下面是開始運行界面。
開始運行界面后臺代碼:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using ComponentFactory.Krypton.Toolkit;//項目需要命名空間//using System.Data.SqlClient;using KryptonFormAirComPRessor.DAL;using KryptonFormAirCompressor.BLL;using System.Windows.Forms.DataVisualization.Charting;namespace KryptonFormAirCompressor.UI{ public partial class 開始運行 : ComponentFactory.Krypton.Toolkit.KryptonForm { //定義數據采集類 StartRun run = new StartRun(); DataTable dt = new DataTable(); //定義一種行樣式 private DataGridViewCellStyle m_RowStyleNormal; //定義測試數據邏輯類 testdData td = new testdData(); public 開始運行() { InitializeComponent(); } private void 開始運行_Resize(object sender, EventArgs e) { Split1.Height = this.tabPage2.Height / 3 - 1; Split2.Height = this.tabPage2.Height / 3 - 1; Split3.Height = this.tabPage2.Height - Split1.Height - Split2.Height; tabRun.Refresh(); // run.chartInit(chart1, tabPage2); } private void 開始運行_Load(object sender, EventArgs e) { refeshData(); run.chartInit(chart1, tabPage2); run.chartInit(chart2, tabPage2); run.chartInit(chart3, tabPage2); run.chartInit(chart4, tabPage2); run.chartInit(chart5, tabPage2); run.chartInit(chart6, tabPage2); //添加數據表兩列 dt.Columns.Add("XTime", System.Type.GetType("System.String")); dt.Columns.Add("YTemp", System.Type.GetType("System.String")); } //刷新數據 private void refeshData() { kptGridRun.DataSource = td.GetDataTable(); kptGridRun.AllowUserToAddRows = false; } /// <summary> /// 設置單元格的格式 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void kptGridRun_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) { //可根據需要設置更多樣式屬性,如字體、對齊、前景色、背景色等 this.m_RowStyleNormal = new DataGridViewCellStyle(); //this.m_RowStyleNormal.BackColor = Color.LightBlue; kptGridRun.Columns[0].DefaultCellStyle.BackColor = Color.LightGray; kptGridRun.Columns[1].DefaultCellStyle.BackColor = Color.LightGray; ; kptGridRun.Columns[2].DefaultCellStyle.BackColor = Color.LightGray; ; //this.m_RowStyleNormal.SelectionBackColor = Color.LightSteelBlue; //this.m_RowStyleNormal.SelectionForeColor = Color.Red; kptGridRun.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; kptGridRun.Columns[0].FillWeight = 60; kptGridRun.Columns[1].FillWeight = 100; kptGridRun.Columns[2].FillWeight = 80; kptGridRun.Columns[3].FillWeight = 50; kptGridRun.Columns[4].FillWeight = 50; kptGridRun.Columns[5].FillWeight = 50; kptGridRun.Columns[0].ReadOnly = true; kptGridRun.Columns[1].ReadOnly = true; kptGridRun.Columns[2].ReadOnly = true; kptGridRun.Columns[3].ReadOnly = true; kptGridRun.Columns[4].ReadOnly = true; kptGridRun.Columns[5].ReadOnly = true; kptGridRun.RowsDefaultCellStyle = m_RowStyleNormal; } private void timer1_Tick(object sender, EventArgs e) { if (Convert.ToDouble(chart1TxtMin.Text) < Convert.ToDouble(chart1TxtMax.Text)) { chart1TxtNow.Text = run.chart(chart1, chart1ComboBox.SelectedIndex, dt, Convert.ToDouble(chart1TxtMin.Text), Convert.ToDouble(chart1TxtMax.Text), 0).ToString(); } if (Convert.ToDouble(chart2TxtMin.Text) < Convert.ToDouble(chart2TxtMax.Text)) { chart2TxtNow.Text = run.chart(chart2, chart2ComboBox.SelectedIndex, dt, Convert.ToDouble(chart2TxtMin.Text), Convert.ToDouble(chart2TxtMax.Text), 0).ToString(); } if (Convert.ToDouble(chart3TxtMin.Text) < Convert.ToDouble(chart3TxtMax.Text)) { chart3TxtNow.Text = run.chart(chart3, chart3ComboBox.SelectedIndex, dt, Convert.ToDouble(chart3TxtMin.Text), Convert.ToDouble(chart3TxtMax.Text), 0).ToString(); } if (Convert.ToDouble(chart4TxtMin.Text) < Convert.ToDouble(chart4TxtMax.Text)) { chart4TxtNow.Text = run.chart(chart4, chart4ComboBox.SelectedIndex, dt, Convert.ToDouble(chart4TxtMin.Text), Convert.ToDouble(chart4TxtMax.Text), 0).ToString(); } if (Convert.ToDouble(chart5TxtMin.Text) < Convert.ToDouble(chart5TxtMax.Text)) { chart5TxtNow.Text = run.chart(chart5, chart5ComboBox.SelectedIndex, dt, Convert.ToDouble(chart5TxtMin.Text), Convert.ToDouble(chart5TxtMax.Text), 0).ToString(); } if (Convert.ToDouble(chart6TxtMin.Text) < Convert.ToDouble(chart6TxtMax.Text)) { chart6TxtNow.Text = run.chart(chart6, chart6ComboBox.SelectedIndex, dt, Convert.ToDouble(chart6TxtMin.Text), Convert.ToDouble(chart6TxtMax.Text), 0).ToString(); } } }}
StartRun類:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;using System.Windows.Forms.DataVisualization.Charting;using System.Drawing;using System.Windows.Forms;namespace KryptonFormAirCompressor.BLL{ class StartRun { static DateTime startTime = DateTime.Now.AddSeconds(-1); DateTime endTime = startTime.AddSeconds(6); DateTime kd = DateTime.Parse("00:00:01"); Random rd = new Random(); //隨機函數,產生Y軸數據 DataTable dt = new DataTable(); //創建數據表,存儲數據 int flag = 0; //設置Timer控件是否生效 int i = 0; //顯示數據表中的數據行數 double yMax = 400; double yMin = -400; double yStep = 200; Chart mychart = new Chart(); //圖表初始化 public void chartInit(Chart ch, TabPage tp) { TabPage tabPage2 = tp; Chart chInit = ch; ch.Series["Series1"].Points.Clear(); chInit.Width = tabPage2.Width / 2 - 1; chInit.Height = tabPage2.Height / 3 - 25; chInit.BackColor = Color.Azure; //設置是否在內部繪圖區域中自動設置合適的圖表元素 chInit.ChartAreas["ChartArea1"].Position.Auto = false; chInit.ChartAreas["ChartArea1"].Position.X = 0; chInit.ChartAreas["ChartArea1"].Position.Y = 0; chInit.ChartAreas["ChartArea1"].Position.Width = 100; chInit.ChartAreas["ChartArea1"].Position.Height = 100; chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Auto = false; chInit.ChartAreas["ChartArea1"].InnerPlotPosition.X = 7; chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Y = 4; chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Width = 88; chInit.ChartAreas["ChartArea1"].InnerPlotPosition.Height = 85; ////設置X軸字體類型、大小、顏色 //chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.Font = new System.Drawing.Font("宋體", 10f); //chInit.ChartAreas["ChartArea1"].AxisX.LabelStyle.ForeColor = Color.Black; ////設置Y軸字體類型、大小、顏色 //chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.Font = new System.Drawing.Font("宋體", 10f); //chInit.ChartAreas["ChartArea1"].AxisY.LabelStyle.ForeColor = Color.Black; } public double chart(Chart ch, int category, DataTable table, double min, double max, double now) { mychart = ch; dt = table; yMin = min; yMax = max;
新聞熱點
疑難解答