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;
}
以上是学习笔记,如有侵权,请联系作者,谢谢。