1 using DevExpress.XtraCharts; 2 using System; 3 using System.Collections.Generic; 4 using System.ComponentModel; 5 using System.Data; 6 using System.Drawing; 7 using System.Linq; 8 using System.Text; 9 using System.Windows.Forms; 10 11 12 namespace WindowsFormsApplication1张奎 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 private void button1_Click(object sender, EventArgs e) 22 { 23 24 25 #region 26 //int tabPagesCount = 0; 27 //ChartControl chartControl1 = new ChartControl(); 28 29 //// Create two series. 30 //Series series1 = new Series("Series 1", ViewType.Bar); 31 //Series series2 = new Series("Series 2", ViewType.Line); 32 33 //// Add points to them, with their arguments different. 34 //series1.Points.Add(new SeriesPoint("A", 10)); 35 //series1.Points.Add(new SeriesPoint("B", 12)); 36 //series1.Points.Add(new SeriesPoint("C", 17)); 37 //series1.Points.Add(new SeriesPoint("D", 14)); 38 //series2.Points.Add(new SeriesPoint("I", 2500)); 39 //series2.Points.Add(new SeriesPoint("II", 3800)); 40 //series2.Points.Add(new SeriesPoint("III", 1500)); 41 //series2.Points.Add(new SeriesPoint("IV", 1300)); 42 43 //// Add both series to the chart. 44 //chartControl1.Series.AddRange(new Series[] { series1, series2 }); 45 46 //// Hide the legend (optional). 47 //chartControl1.Legend.Visible = false; 48 49 //// Cast the chart's diagram to the XYDiagram type, 50 //// to access its axes and panes. 51 //XYDiagram diagram = (XYDiagram)chartControl1.Diagram; 52 53 //// Add secondary axes to the diagram, and adjust their options. 54 //diagram.SecondaryAxesX.Add(new SecondaryAxisX("My Axis X")); 55 //diagram.SecondaryAxesY.Add(new SecondaryAxisY("My Axis Y")); 56 //diagram.SecondaryAxesX[0].Alignment = AxisAlignment.Near; 57 //diagram.SecondaryAxesY[0].Alignment = AxisAlignment.Near; 58 59 //// Add a new additional pane to the diagram. 60 //diagram.Panes.Add(new XYDiagramPane("My Pane")); 61 62 //// Assign both the additional pane and, if required, 63 //// the secondary axes to the second series. 64 //LineSeriesView myView = (LineSeriesView)series2.View; 65 //myView.AxisX = diagram.SecondaryAxesX[0]; 66 //myView.AxisY = diagram.SecondaryAxesY[0]; 67 //// Note that the created pane has the zero index in the collection, 68 //// because the existing Default pane is a separate entity. 69 //myView.Pane = diagram.Panes[0]; 70 71 //// Customize the layout of the diagram's panes. 72 //diagram.PaneDistance = 10; 73 //diagram.PaneLayoutDirection = PaneLayoutDirection.Horizontal; 74 //diagram.DefaultPane.SizeMode = PaneSizeMode.UseWeight; 75 //diagram.DefaultPane.Weight = 1.2; 76 77 //// Add the chart to the form. 78 //chartControl1.Dock = DockStyle.Fill; 79 ////this.Controls.Add(chartControl1); 80 //this.xtraTabControl1.TabPages.Add("zbl两个pane图");//添加一个page 81 //tabPagesCount = this.xtraTabControl1.TabPages.Count-1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove 82 //this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(chartControl1); 83 //this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount; 84 85 86 //// 87 //ChartControl chartControl2 = new ChartControl(); 88 89 //// Create two series. 90 //Series series3 = new Series("Series 3", ViewType.Bar); 91 //Series series4= new Series("Series 4", ViewType.Line); 92 93 //// Add points to them, with their arguments different. 94 //series3.Points.Add(new SeriesPoint("A", 10)); 95 //series3.Points.Add(new SeriesPoint("B", 12)); 96 //series3.Points.Add(new SeriesPoint("C", 17)); 97 //series3.Points.Add(new SeriesPoint("D", 14)); 98 //series4.Points.Add(new SeriesPoint("I", 2500)); 99 //series4.Points.Add(new SeriesPoint("II", 3800)); 100 //series4.Points.Add(new SeriesPoint("III", 1500)); 101 //series4.Points.Add(new SeriesPoint("IV", 1300)); 102 103 //// Add both series to the chart. 104 //chartControl2.Series.AddRange(new Series[] { series3, series4 }); 105 106 //// Hide the legend (optional). 107 //chartControl2.Legend.Visible = false; 108 109 //// Cast the chart's diagram to the XYDiagram type, 110 //// to access its axes and panes. 111 //XYDiagram diagram2 = (XYDiagram)chartControl2.Diagram; 112 113 //// Add secondary axes to the diagram, and adjust their options. 114 //diagram2.SecondaryAxesX.Add(new SecondaryAxisX("My Axis X")); 115 //diagram2.SecondaryAxesY.Add(new SecondaryAxisY("My Axis Y")); 116 //diagram2.SecondaryAxesX[0].Alignment = AxisAlignment.Near; 117 //diagram2.SecondaryAxesY[0].Alignment = AxisAlignment.Near; 118 119 //// Add a new additional pane to the diagram. 120 //diagram2.Panes.Add(new XYDiagramPane("My Pane")); 121 122 //// Assign both the additional pane and, if required, 123 //// the secondary axes to the second series. 124 //LineSeriesView myView2 = (LineSeriesView)series2.View; 125 //myView2.AxisX = diagram2.SecondaryAxesX[0]; 126 //myView2.AxisY = diagram2.SecondaryAxesY[0]; 127 //// Note that the created pane has the zero index in the collection, 128 //// because the existing Default pane is a separate entity. 129 //myView2.Pane = diagram2.Panes[0]; 130 131 //// Customize the layout of the diagram's panes. 132 //diagram2.PaneDistance = 10; 133 //diagram2.PaneLayoutDirection = PaneLayoutDirection.Horizontal; 134 //diagram2.DefaultPane.SizeMode = PaneSizeMode.UseWeight; 135 //diagram2.DefaultPane.Weight = 1.2; 136 137 //// Add the chart to the form. 138 //chartControl2.Dock = DockStyle.Fill; 139 ////this.Controls.Add(chartControl1); 140 //this.xtraTabControl1.TabPages.Add("zbl两个pane图");//添加一个page 141 //tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove 142 //this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(chartControl2); 143 //this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount; 144 145 #endregion 146 147 148 this.xtraTabPage1.PageVisible = false; 149 this.xtraTabPage2.PageVisible = false; 150 this.xtraTabControl1.TabPages.Add("三角函数图");//添加一个page,在此之前可以直接用ui界面的本控件的remove属性删除默认的两个page 151 ChartControl lineChartControl = new ChartControl();//实例化一个ChartControl 152 lineChartControl.Legend.UseCheckBoxes = true;//图例可以勾选 153 154 //产生数据 155 List<double> xaxesList = new List<double>();//x轴数据 156 List<double> ySinList = new List<double>();//系列1-y轴数据 157 List<double> yCosList = new List<double>();//系列2-y轴数据 158 List<double> yTanList = new List<double>();//系列3-y轴数据 159 for (int i = 0; i < 20; i++) 160 { 161 xaxesList.Add(i); 162 ySinList.Add(Math.Sin(i)); 163 yCosList.Add(0.8*Math.Sin(i)); 164 yTanList.Add(Math.Sin(i) + Math.Cos(i)); 165 } 166 //将所有系列的y值放入一个列表,这个列表是列表的列表 167 List<List<double>> YList = new List<List<double>>(); 168 YList.Add(ySinList); 169 YList.Add(yCosList); 170 YList.Add(yTanList); 171 //系列内容名称 172 List<string> seriesTextList = new List<string>();//系列内容名称 173 seriesTextList.Add("预测曲线"); 174 seriesTextList.Add("实验值"); 175 seriesTextList.Add("cos+sin"); 176 //系列名称 177 List<Series> seriesNameList = new List<Series>(); 178 for (int i = 0; i < 3; i++) 179 { 180 //完全建立一个系列,以后直接用就行了 181 seriesNameList.Add(new Series(seriesTextList[i], ViewType.Spline));//ScatterLine点划线,实验值用这种,理论值用line 182 } 183 //将系列假如chartControl 184 for (int seriesIndex = 0; seriesIndex < 3; seriesIndex++) 185 { 186 if(seriesIndex==0) 187 ShowSeries_yuce(lineChartControl, seriesNameList[seriesIndex], seriesTextList[seriesIndex], xaxesList, YList[seriesIndex]); 188 189 else if (seriesIndex==1) 190 ShowSeries(lineChartControl, seriesNameList[seriesIndex], seriesTextList[seriesIndex], xaxesList, YList[seriesIndex], seriesIndex); 191 192 193 } 194 //显示 195 int tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove 196 this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(lineChartControl);//将ChartControl这个控件添加到这个page中 197 this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;//切换到这个page为选中的page 198 199 200 201 202 203 //尝试第二个图 204 this.xtraTabControl1.TabPages.Add("三角函数图2");//添加一个page,在此之前可以直接用ui界面的本控件的remove属性删除默认的两个page 205 ChartControl lineChartControl2 = new ChartControl();//实例化一个ChartControl 206 lineChartControl2.Legend.UseCheckBoxes = true;//图例可以勾选 207 208 //产生数据 209 List<double> xaxesList2 = new List<double>();//x轴数据 210 List<double> ySinList2 = new List<double>();//系列1-y轴数据 211 List<double> yCosList2 = new List<double>();//系列2-y轴数据 212 List<double> y08sinList2 = new List<double>();//系列3-y轴数据 213 List<double> y05sinList2 = new List<double>(); 214 for (int i = 0; i < 20; i++) 215 { 216 xaxesList2.Add(i); 217 ySinList2.Add(Math.Cos(i)); 218 yCosList2.Add(0.8*Math.Cos(i)); 219 y08sinList2.Add(0.6 * Math.Sin(i)); 220 y05sinList2.Add(0.5*Math.Sin(i)); 221 222 } 223 //将所有系列的y值放入一个列表,这个列表是列表的列表 224 List<List<double>> YList2 = new List<List<double>>(); 225 YList2.Add(ySinList2); 226 YList2.Add(yCosList2); 227 YList2.Add(y08sinList2); 228 YList2.Add(y05sinList2); 229 230 //系列内容名称 231 List<string> seriesTextList2 = new List<string>();//系列内容名称 232 seriesTextList2.Add("预测曲线"); 233 seriesTextList2.Add("实验值"); 234 seriesTextList2.Add("预测曲线2"); 235 seriesTextList2.Add("实验值2"); 236 237 238 //系列名称 239 List<Series> seriesNameList2 = new List<Series>(); 240 for (int i = 0; i < 4; i++) 241 { 242 //完全建立一个系列,以后直接用就行了 243 seriesNameList2.Add(new Series(seriesTextList2[i], ViewType.Spline));//ScatterLine点划线,实验值用这种,理论值用line 244 } 245 //将系列加入chartControl 246 for (int seriesIndex = 0; seriesIndex < 4; seriesIndex++) 247 { 248 if(seriesIndex==0 || seriesIndex==2) //根据数据是实验值还是预测值分别选择绘图函数 ShowSeries或者ShowSeries_yuce 249 ShowSeries_yuce(lineChartControl2, seriesNameList2[seriesIndex], seriesTextList2[seriesIndex], xaxesList2, YList2[seriesIndex]); 250 251 else 252 ShowSeries(lineChartControl2, seriesNameList2[seriesIndex], seriesTextList2[seriesIndex], xaxesList2, YList2[seriesIndex], seriesIndex); 253 } 254 //显示 255 tabPagesCount = this.xtraTabControl1.TabPages.Count - 1;//xtraTabControl2page的个数,为了删除默认的,可以用ui界面的remove 256 this.xtraTabControl1.TabPages[tabPagesCount].Controls.Add(lineChartControl2);//将ChartControl这个控件添加到这个page中 257 this.xtraTabControl1.SelectedTabPageIndex = tabPagesCount;//切换到这个page为选中的page 258 259 260 261 } 262 public void ShowSeries(ChartControl lineChartControl, Series seriesName, string seriesText, List<double> xAxes, 263 List<double> yAxes, int iMarkerKind) 264 { 265 266 //seriesName = new Series(seriesText, ViewType.ScatterLine);//新建立一个系列 267 seriesName.ArgumentScaleType = ScaleType.Numerical;//x轴数据类型,为数字 268 ((LineSeriesView)seriesName.View).LineMarkerOptions.Kind = (MarkerKind)((iMarkerKind % 9));//mark类型 MarkerKind.Triangle 269 ((LineSeriesView)seriesName.View).MarkerVisibility = DevExpress.Utils.DefaultBoolean.True; 270 271 ((LineSeriesView)seriesName.View).LineStyle.DashStyle = DashStyle.Dash;//线型 272 for (int pointIndex = 0; pointIndex < xAxes.Count; pointIndex++) 273 { 274 seriesName.Points.Add(new SeriesPoint(xAxes[pointIndex], yAxes[pointIndex])); 275 } 276 lineChartControl.Series.Add(seriesName);//往ChartControl控件上添加系列 277 lineChartControl.Legend.Visible = true;//图例可见 278 ((XYDiagram)lineChartControl.Diagram).Rotated = false;//ChartControl控件不旋转 279 lineChartControl.Dock = DockStyle.Fill;//ChartControl控件在父控件内填满平铺 280 } 281 282 public void ShowSeries_yuce(ChartControl lineChartControl, Series seriesName, string seriesText, List<double> xAxes, 283 List<double> yAxes) 284 { 285 286 //seriesName = new Series(seriesText, ViewType.ScatterLine);//新建立一个系列 287 seriesName.ArgumentScaleType = ScaleType.Numerical;//x轴数据类型,为数字 288 289 ((LineSeriesView)seriesName.View).LineStyle.DashStyle = DashStyle.Dash;//线型 290 for (int pointIndex = 0; pointIndex < xAxes.Count; pointIndex++) 291 { 292 seriesName.Points.Add(new SeriesPoint(xAxes[pointIndex], yAxes[pointIndex])); 293 } 294 lineChartControl.Series.Add(seriesName);//往ChartControl控件上添加系列 295 lineChartControl.Legend.Visible = true;//图例可见 296 ((XYDiagram)lineChartControl.Diagram).Rotated = false;//ChartControl控件不旋转 297 lineChartControl.Dock = DockStyle.Fill;//ChartControl控件在父控件内填满平铺 298 } 299 300 private void Form1_Load(object sender, EventArgs e) 301 { 302 303 } 304 305 306 } 307 }