zp820 发表于 2011-8-11 17:00:03

C#如何显示曲线

我用C#winform制作了一个串口软件,现在我想把18b20采集的温度数据通过串口将温度变化的曲线显示在P串口软件上上,应该如何实现?

skystalker 发表于 2011-8-11 19:40:18

把采样的数据用GDI+画线画出来

Alexkey 发表于 2011-8-11 20:07:11

ZedGraph

msmmbl 发表于 2011-8-11 20:16:25

严重同意楼上,很好的一个画曲线图的控件。

lovewwy 发表于 2011-8-11 21:23:22

我正好最近也需要用C#画线。MARK

wlmwwx 发表于 2011-8-11 23:04:46

.net 3.5 开始已经带了chart 组件。用法参考这个网站的例子。
http://archive.msdn.microsoft.com/mschart

outt60777 发表于 2011-8-11 23:33:52

mark!!

chenxiliang110 发表于 2011-8-11 23:38:41

mark!

wangyi1e 发表于 2011-8-11 23:44:15

mark一下,我一直用measurement studio for vs2008

ep1c3 发表于 2011-8-12 08:32:55

回复【8楼】wangyi1e
-----------------------------------------------------------------------

有破——解版的吗?

Feeling_MCU 发表于 2011-8-12 09:07:05

顶、、、

summarize 发表于 2011-8-12 09:10:02

学习!

zp820 发表于 2011-8-15 17:05:46

谢谢各位!再好好研究研究。

zhq0571 发表于 2011-8-15 17:45:04

使用 自带的Chart 可显示 温度变化的曲线

   public System.Windows.Forms.DataVisualization.Charting.Chart chart_WSD;



   public void WSD_图表节点显示设定(string DZ)
      {
            string DT = " DT >= '" + dateTimePicker_WSD_S.Value.ToString() + "' and DT <='" + dateTimePicker_WSD_E.Value.ToString() + "' ";
            apps.DBF.T_温湿度记录.Open(" select * from wsdlist where dz = '" + DZ + "' and " + DT + " order by dt ");

            if (apps.DBF.T_温湿度记录.data.Rows.Count > 2)
            {
                chart_WSD.ChartAreas.AxisX.Minimum = DateTime.Parse(apps.DBF.T_温湿度记录.data.Rows["DT"].ToString()).ToOADate();
                chart_WSD.ChartAreas.AxisX.Maximum = DateTime.Parse(apps.DBF.T_温湿度记录.data.Rows["DT"].ToString()).ToOADate();
            }
            else
            {
                chart_WSD.ChartAreas.AxisX.Minimum = dateTimePicker_WSD_S.Value.ToOADate();
                chart_WSD.ChartAreas.AxisX.Maximum = dateTimePicker_WSD_E.Value.ToOADate();
            }
            chart_WSD.ChartAreas.AxisX2.Minimum = chart_WSD.ChartAreas.AxisX.Minimum;
            chart_WSD.ChartAreas.AxisX2.Maximum = chart_WSD.ChartAreas.AxisX.Maximum;


            chart_WSD.Series.Clear();
            chart_WSD.DataSource = apps.DBF.T_温湿度记录.Bs;

         /* if (checkedListBox_wsd.GetItemChecked(0))//def
            {
                Chart_Set(ref chart_WSD, "WD0", "平均温度");
                Chart_Set(ref chart_WSD, "SD0", "平均温度");
                Chart_Set(ref chart_WSD, "WD1", "内温度");
                Chart_Set(ref chart_WSD, "SD1", "内温度");
                Chart_Set(ref chart_WSD, "WD2", "外温度");
                Chart_Set(ref chart_WSD, "SD2", "外温度");
            }*/
            checkedListBox_wsd.SetItemChecked(0, true);
            checkedListBox_wsd.SetItemChecked(1, true);
            checkedListBox_wsd.SetItemChecked(2, true);
            
            uC_通用表格_WSD.dGV.Columns["DZ"].HeaderText = "地址";
            uC_通用表格_WSD.dGV.Columns["DT"].HeaderText = "时间";


            uC_通用表格_WSD.dGV.Columns["XH"].Visible = false;
            uC_通用表格_WSD.dGV.Columns["CTRL"].Visible = false;
            uC_通用表格_WSD.dGV.Columns["SD"].Visible = false;
            uC_通用表格_WSD.dGV.Columns["WD17"].Visible = false;
            uC_通用表格_WSD.dGV.Columns["SD17"].Visible = false;

            for (int i=0;i<checkedListBox_wsd.Items.Count;i++)
            {
                string WDS="WD"+i.ToString();
                string SDS="SD"+i.ToString();
                string TXT = i.ToString();
                if (i == 0) TXT = "平均";
                if (i == 1) TXT = "内部";
                if (i == 2) TXT = "外部";
               
                Chart_Set(ref chart_WSD,WDS,TXT+"温度");
                Chart_Set(ref chart_WSD, SDS,TXT + "湿度");

                uC_通用表格_WSD.dGV.Columns.HeaderText = TXT + "温度";
                uC_通用表格_WSD.dGV.Columns.HeaderText = TXT + "湿度";
               
                if (checkedListBox_wsd.GetItemChecked(i))
                {
                  uC_通用表格_WSD.dGV.Columns.Visible = true;
                  uC_通用表格_WSD.dGV.Columns.Visible = true;
                  chart_WSD.Series.Enabled = true;
                  chart_WSD.Series.Enabled = true;
                  //chart_WSD
                }
                else
                {
                  uC_通用表格_WSD.dGV.Columns.Visible = false;
                  uC_通用表格_WSD.dGV.Columns.Visible = false;
                  chart_WSD.Series.Enabled = false;
                  chart_WSD.Series.Enabled = false;
               
                }
            }
            

      }

zp820 发表于 2011-8-16 09:00:22

这是这个ZedGraph组件:ourdev_668116S8JVV9.rar(文件大小:577K) (原文件名:zedgraph_dll_v509_459.rar)
下面这个网址有使用方法:
http://hi.baidu.com/sakuram/blog/item/0cc40450dbc8726b84352475.html

xuyqhd 发表于 2011-8-16 11:17:00

mark

lee345 发表于 2011-8-16 14:11:16

回复【14楼】zp820
这是这个zedgraph组件: (原文件名:zedgraph_dll_v509_459.rar)
下面这个网址有使用方法:
http://hi.baidu.com/sakuram/blog/item/0cc40450dbc8726b84352475.html
-----------------------------------------------------------------------

谢谢,可以用,有祥细的说明更好

fanwt 发表于 2011-8-16 14:30:12

mark~

vivalite 发表于 2011-8-16 14:40:04

推荐微软免费的MSChart,完全收购于多年致力于图表控件的Dundas公司

huang_wei 发表于 2011-8-30 12:33:32

mark!

Delong_z 发表于 2011-8-30 12:46:54

我用的ZedGraph,还不错!
开源,免费。

haozi007 发表于 2011-9-1 00:31:36

回复【20楼】Delong_z天之蛟龙
我用的zedgraph,还不错!
开源,免费。
-----------------------------------------------------------------------


是的,Zedgraph很不错。不过从08年底这个项目就没有再更新过了,请楼主把这一点考虑进去,如果zedgraph当前功能可以在将来一直满足你的需求,那么是一个不错的选择,否则,请考虑微软的mschart

myhonour 发表于 2011-9-5 14:14:53

mark

summarize 发表于 2011-9-5 23:44:08

学习

STM32_Study 发表于 2011-9-6 00:31:26

静态的用 MSChart 很好

但据说 MSChart 动态不行,刷新会闪烁

网上流传的一个所谓的解决闪烁的办法,但很多人说不靠谱

不知道有没有更好的办法可以解决这个问题

vivalite 发表于 2011-9-6 08:49:04

以前我做过一个每秒更新4次无闪烁的MSChart程序,只要打开offscreen drawing就行了。我还试过用API阻止MSChart过快ReDraw,也是有效果的。

wenfaxiang 发表于 2012-1-17 22:14:04

学习了

armecos 发表于 2012-1-17 23:52:08

lixuyongzd 发表于 2012-1-18 08:06:08

mark

ymgfc 发表于 2012-1-19 17:16:39

回复【17楼】fanwt
mark~
-----------------------------------------------------------------------

Dundas被MS收购了?好事啊

1153637260 发表于 2014-5-28 09:51:09

页: [1]
查看完整版本: C#如何显示曲线