c#winform图表控件使用示例

公司有个需求,须要作嵌入式开发,跟硬件通讯,把数据实时展现到winform中,网上查了资料,先写下个demo备用,到时候接入socket通讯就完成了,具体效果如图dom

 

实现的原理是把最开始的数据去掉,加入新的数据,接着不停的绑定曲线数据,就能达到曲线实时展现的效果了socket

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { lb_shebei.Text = "等待设备链接"; c1.ChartAreas[0].Axes[0].MajorGrid.Enabled = false;//X轴上网格
            c1.ChartAreas[0].Axes[1].MajorGrid.LineDashStyle = ChartDashStyle.Dash;   //y轴网格类型 短横线
            c1.ChartAreas[0].Axes[1].MajorGrid.LineColor = Color.Gray;//Y轴网格线颜色
            c1.ChartAreas[0].Axes[0].MajorTickMark.Enabled = false;// x轴上突出的小点
            c1.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;//设置x轴不显示
            c1.ChartAreas[0].Axes[1].MajorTickMark.Enabled = false;//y轴上突出的小点
            c1.ChartAreas[0].Axes[1].IsInterlaced = false;  //显示交错带 //c1.ChartAreas[0].Axes[0].LabelStyle.Format = "#年"; //设置X轴显示样式
            c1.Series[0].IsValueShownAsLabel = true;//曲线点是否显示值
            c1.Legends[0].Docking = Docking.Bottom;//调整图例位置
            c1.Legends[0].Alignment = StringAlignment.Center;//调整图例位置
            c1.Series[0].ChartType = SeriesChartType.Spline;//图表类型
            c1.Series[0].MarkerStyle = MarkerStyle.None;  //标记点类型
            c1.Series[0].XValueType = ChartValueType.Time;//x轴坐标类型
            c1.Series[0].Name = "应力监测"; //c1.Series[0].IsValueShownAsLabel = true;//显示数值
 Thread t1 = new Thread(MyLine); t1.IsBackground = true; t1.Start(); } List<DateTime> xlist = new List<DateTime>(); List<int> ylist = new List<int>(); void BindData() { Random rd = new Random(); DateTime dt = DateTime.Now; ylist.Add(rd.Next(-2, 5)); xlist.Add(dt); if (xlist.Count > 50) { ylist.Remove(ylist[0]); xlist.Remove(xlist[0]); } } public void MyLine() { while (true) { BindData(); BindZp(xlist, ylist); Thread.Sleep(1000); } } delegate void SetXCallback(List<DateTime> x, List<int> y); void BindZp(List<DateTime> x, List<int> y) { if (c1.InvokeRequired) { SetXCallback d = new SetXCallback(BindZp); this.Invoke(d, new object[] { x, y }); } else { c1.Series[0].Points.DataBindXY(x, y);//绑定数据
 } } private void btn_out_Click(object sender, EventArgs e) { DialogResult dr = MessageBox.Show("正在数据传输,肯定要退出吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question); if (dr == DialogResult.OK) { Application.Exit(); this.Dispose(); this.Close(); } } }
相关文章
相关标签/搜索