C# Chart 控件使用笔记

 Winform 实现如图片所示画面;

1、鼠标悬停显示:GetToolTipText 事件写个方法

 if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
            {
                int i = e.HitTestResult.PointIndex;

//分别显示x轴和y轴的数值,其中{1:F3},表示显示的是float类型,精确到小数点后3位。 
                DataPoint dp = e.HitTestResult.Series.Points[i];

                string r = "时段:"+dp.XValue.ToString()+"\r\n";

 //鼠标坐标
                Point formPoint = this.PointToClient(Control.MousePosition);
                int x = formPoint.X - 30;
                int y = formPoint.Y - 100;
                toolTip1.Show(r,this,x,y);//显示框

                }

2、刻度线显示:

            area.AxisY.MajorGrid.LineColor = Color.FromArgb(235, 235, 235);
            area.AxisY.MajorTickMark.LineColor = Color.Transparent;

3、UserControl 初始化:

        public ChartArea area;
        public Title title;
        public Dictionary<string, Series> dicSeries;
        public Dictionary<string, Legend> dicLegend;

 public void initChart(string titleName, string titleX, string titleY, List<string> seriesName, double AxisXInterval = 10, double AxisXMax = 200, double AxisXMin = 0, double AxisYInterval = 10, double AxisYMax = 200, double AxisYMin = 0, float TitleSize = 18, bool isSetAxis = true)
        {
            IAsyncResult iar = this.BeginInvoke(new Action(() =>
            {
                chartValue.ChartAreas.Clear();
                chartValue.Titles.Clear();
                chartValue.Series.Clear();
                chartValue.Legends.Clear();
                ClsChart(titleName, titleX, titleY, seriesName, AxisXInterval: AxisXInterval, AxisXMax: AxisXMax, AxisXMin: AxisXMin, AxisYInterval: AxisYInterval, AxisYMax: AxisYMax, AxisYMin: AxisYMin, TitleSize: TitleSize, isSetAxis: isSetAxis);
            }));

            this.BeginInvoke(new Action(() =>
            {
                chartValue.ChartAreas.Add(area);
                chartValue.Titles.Add(title);
                for (int index = 0; index < seriesName.Count; index++)
                {
                    chartValue.Series.Add(dicSeries[seriesName[index]]);
                    chartValue.Legends.Add(dicLegend[seriesName[index]]);
                }
                for (int i = 0; i < chartValue.Legends.Count; i++)
                {
                    chartValue.Legends[i].Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
                    chartValue.Legends[i].Alignment = StringAlignment.Center;
                }
            }));
        }

 public void bindData(string seriesName, List<int> lstValueX, List<int> lstValueY)
        {
            this.BeginInvoke(new Action(() => {
                BindData(seriesName, lstValueX, lstValueY);
                this.Refresh();
            }));

        }

        public void BindData(string seriesName, List<int> lstValueX, List<int> lstValueY)
        {
            dicSeries[seriesName].Points.DataBindXY(lstValueX, lstValueY);
        }

4、控件调用:

 public Dictionary<string, List<int>> dicSerieValue;

 foreach (string id in stationID) {

                ucChart ucchart = new ucChart();
                flpanel1.Controls.Add(ucchart);
                ucchart.initChart(id + "标题", "", "", seriesName, AxisXMin: -1, AxisXMax: 24, AxisYMin: 0, AxisYMax: 30000, AxisYInterval: 3000);
                dicSerieValue.Clear();
                for (int i = 0; i < seriesName.Count; i++)
                {
                    DataRow[] dr = dt.Select("level='" + seriesName[i] + "' AND STATIONID='"+ id + "'");
                    YValueOK = new int[24];
                    foreach (DataRow drr in dr)
                    {
                        string bb = drr[12].ToString();
                        DateTime kk = Convert.ToDateTime(drr[12].ToString());
                        int iHourIndex = kk.Hour;
                        YValueOK[iHourIndex] += int.Parse(drr[7].ToString());

                    }
                    dicSerieValue.Add(seriesName[i], YValueOK.ToList<int>());

                }
                foreach (KeyValuePair<string, List<int>> kvp in dicSerieValue)
                {
                    ucchart.bindData(kvp.Key, xValue1.ToList<int>(), kvp.Value);
                }
            }

5、.csv文件读取方式:

string[] lines = File.ReadAllLines(txtResultFile.Text);

foreach (string line in lines)
                {
                    aryLine = line.Split(',');
                    if (IsFirst == true)
                    {//表头 

 DataColumn dc = new DataColumn(aryLine[i]);
                            dt.Columns.Add(dc);

                   }else{

DataRow dr = dt.NewRow();

}

6、文本框选文件:

OpenFileDialog fileDialog = new OpenFileDialog();
            //限定扩展
            fileDialog.Multiselect = true;
            fileDialog.Title = "请选择文件";
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                txtResultFile.Text = fileDialog.FileName;
            }

以上是学习笔记,如有侵权,请联系作者,谢谢。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值