WinForm 用户控件 柱形图 折线图 饼图

WinForm用户控件实现读取XML文件,生成柱形图,折线图,饼图:

1.新建Windows应用程序 ChartControl;

2.添加用户控件 ChartControl;

3.ChartControl.Designer.cs代码:
  1. namespace ChartControl
  2. {
  3.     partial class ChartControl
  4.     {
  5.         /// <summary> 
  6.         /// 必需的设计器变量。
  7.         /// </summary>
  8.         private System.ComponentModel.IContainer components = null;
  9.         /// <summary> 
  10.         /// 清理所有正在使用的资源。
  11.         /// </summary>
  12.         /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
  13.         protected override void Dispose(bool disposing)
  14.         {
  15.             if (disposing && (components != null))
  16.             {
  17.                 components.Dispose();
  18.             }
  19.             base.Dispose(disposing);
  20.         }
  21.         #region 组件设计器生成的代码
  22.         /// <summary> 
  23.         /// 设计器支持所需的方法 - 不要
  24.         /// 使用代码编辑器修改此方法的内容。
  25.         /// </summary>
  26.         private void InitializeComponent()
  27.         {
  28.             this.label1 = new System.Windows.Forms.Label();
  29.             this.label2 = new System.Windows.Forms.Label();
  30.             this.label3 = new System.Windows.Forms.Label();
  31.             this.SuspendLayout();
  32.             // 
  33.             // label1
  34.             // 
  35.             this.label1.Location = new System.Drawing.Point(104, 16);
  36.             this.label1.Name = "label1";
  37.             this.label1.Size = new System.Drawing.Size(160, 24);
  38.             this.label1.TabIndex = 0;
  39.             this.label1.Text = "label1";
  40.             // 
  41.             // label2
  42.             // 
  43.             this.label2.Location = new System.Drawing.Point(8, 56);
  44.             this.label2.Name = "label2";
  45.             this.label2.TabIndex = 1;
  46.             this.label2.Text = "label2";
  47.             // 
  48.             // label3
  49.             // 
  50.             this.label3.Location = new System.Drawing.Point(288, 320);
  51.             this.label3.Name = "label3";
  52.             this.label3.TabIndex = 2;
  53.             this.label3.Text = "label3";
  54.             // 
  55.             // ChartControl
  56.             // 
  57.             this.BackColor = System.Drawing.Color.White;
  58.             this.Controls.Add(this.label3);
  59.             this.Controls.Add(this.label2);
  60.             this.Controls.Add(this.label1);
  61.             this.Name = "ChartControl";
  62.             this.Size = new System.Drawing.Size(448, 360);
  63.             this.Load += new System.EventHandler(this.ChartControl_Load);
  64.             this.ResumeLayout(false);
  65.         }
  66.         #endregion
  67.         private System.Windows.Forms.Label label1;
  68.         private System.Windows.Forms.Label label2;
  69.         private System.Windows.Forms.Label label3;
  70.     }
  71. }
4.ChartControl.cs代码:
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Drawing;
  6. using System.Data;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.Xml;
  10. namespace ChartControl
  11. {
  12.     public partial class ChartControl : UserControl
  13.     {
  14.         public ChartControl()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         private void ChartControl_Load(object sender, EventArgs e)
  19.         {
  20.             AllInit();
  21.         }
  22.         #region 读写XML文件的函数
  23.         /// <summary>
  24.         /// 写XML文件
  25.         /// </summary>
  26.         /// <param name="strXmlPath">文件路径+文件名</param>
  27.         /// <param name="strAppKey">Key Name</param>
  28.         /// <param name="strAppValue">Key Value</param>
  29.         public void SetXmlFileValue(string strXmlPath, string strAppKey, string strAppValue)
  30.         {
  31.             XmlDocument xDoc = new XmlDocument();
  32.             xDoc.Load(strXmlPath);
  33.             XmlNode xNode;
  34.             XmlElement xElem1;
  35.             XmlElement xElem2;
  36.             xNode = xDoc.SelectSingleNode("//appSettings");
  37.             xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + strAppKey + "']");
  38.             if (xElem1 != null)
  39.             {
  40.                 xElem1.SetAttribute("value", strAppValue);
  41.             }
  42.             else
  43.             {
  44.                 xElem2 = xDoc.CreateElement("add");
  45.                 xElem2.SetAttribute("key", strAppKey);
  46.                 xElem2.SetAttribute("value", strAppValue);
  47.                 xNode.AppendChild(xElem2);
  48.             }
  49.             xDoc.Save(strXmlPath);
  50.         }
  51.         /// <summary>
  52.         /// 读XML文件
  53.         /// </summary>
  54.         /// <param name="strXmlPath">文件路径+文件名</param>
  55.         /// <param name="strAppKey">Key Name</param>
  56.         /// <param name="strAppValue">Key Value</param>
  57.         public void GetXmlFileValue(string strXmlPath, string strAppKey, ref string strAppValue)
  58.         {
  59.             XmlDocument xDoc = new XmlDocument();
  60.             xDoc.Load(strXmlPath);
  61.             XmlNode xNode;
  62.             XmlElement xElem1;
  63.             xNode = xDoc.SelectSingleNode("//appSettings");
  64.             xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + strAppKey + "']");
  65.             if (xElem1 != null)
  66.             {
  67.                 strAppValue = xElem1.GetAttribute("value");
  68.             }
  69.             else
  70.             {
  71.                 //MessageBox.Show("There is not any information!");
  72.             }
  73.         }
  74.         #endregion
  75.         #region 变量声明
  76.         public int FormHeight;
  77.         public int FormWidth;
  78.         public int Num = 1;
  79.         public int Max = 1;
  80.         public int Min = 1;
  81.         public int JNum = 1;//维数
  82.         public int Polebold;
  83.         public int HeightXS = 100;//高度系数
  84.         public int[] StartAngl = new int[100];//开始角度
  85.         public int[] SweepAngl = new int[100]; //跨越弧度
  86.         public int AllSweep;
  87.         public int KuanDu;
  88.         public int[,] X = new int[100, 100];
  89.         public int[,] Y = new int[100, 100];
  90.         public int[,] YY = new int[100, 100];
  91.         public string[] TypeName = new string[100];
  92.         public string[,] TypeValue = new string[100, 100];
  93.         public string appvalue;
  94.         public string PathFileName = System.Windows.Forms.Application.StartupPath + "//XMLChart.xml";
  95.         System.Windows.Forms.Label[] TypeNameLabel;
  96.         System.Windows.Forms.Label[,] TypeValueLabel;
  97.         #endregion
  98.         #region 自定义函数
  99.         public void AllInit()
  100.         {
  101.             FormHeight = this.Height;
  102.             FormWidth = this.Width;
  103.             GetXmlFileValue(PathFileName, "DiagramName"ref appvalue);
  104.             label1.Text = appvalue + "(此图表控件是测试版)";
  105.             GetXmlFileValue(PathFileName, "YName"ref appvalue);
  106.             label2.Text = appvalue;
  107.             GetXmlFileValue(PathFileName, "XName"ref appvalue);
  108.             label3.Text = appvalue;
  109.             label1.AutoSize = true;
  110.             label1.Top = 5;
  111.             label1.Left = (FormWidth - label1.Width) / 2;
  112.             label2.AutoSize = true;
  113.             label3.AutoSize = true;
  114.             label2.Top = 15;
  115.             label2.Left = 5;
  116.             label3.Top = FormHeight - 10;
  117.             label3.Left = FormWidth - label3.Width - 5;
  118.             GetXmlFileValue(PathFileName, "Num"ref appvalue);
  119.             Num = Int32.Parse(appvalue);
  120.             GetXmlFileValue(PathFileName, "JNum"ref appvalue);
  121.             JNum = Int32.Parse(appvalue);
  122.         }
  123.         public void HistogramBegain()//Histogram 初始化
  124.         {
  125.             for (int i = 1; i <= Num; i++)
  126.             {
  127.                 GetXmlFileValue(PathFileName, "ID" + i.ToString(), ref TypeName[i]);
  128.                 for (int j = 1; j <= JNum; j++)
  129.                 {
  130.                     GetXmlFileValue(PathFileName, "ID" + j.ToString() + "Num" + i.ToString(), ref TypeValue[j, i]);
  131.                 }
  132.             }
  133.             Polebold = FormWidth * 2 / (3 * Num * JNum);
  134.             Max = Int32.Parse(TypeValue[1, 1]);
  135.             Min = Int32.Parse(TypeValue[1, 1]);
  136.             for (int i = 1; i <= Num; i++)
  137.             {
  138.                 for (int j = 1; j <= JNum; j++)
  139.                 {
  140.                     if (Int32.Parse(TypeValue[j, i]) > Max)
  141.                     {
  142.                         Max = Int32.Parse(TypeValue[j, i]);
  143.                     }
  144.                     if (Int32.Parse(TypeValue[j, i]) < Min)
  145.                     {
  146.                         Min = Int32.Parse(TypeValue[j, i]);
  147.                     }
  148.                 }
  149.             }
  150.             for (int i = 1; i < 100; i++)
  151.             {
  152.                 if (Max > (FormHeight - 50))
  153.                 {
  154.                     HeightXS = HeightXS / 2;
  155.                     Max = Max / 2;
  156.                 }
  157.                 if (Max < (FormHeight - 50) / 2)
  158.                 {
  159.                     HeightXS = HeightXS * 2;
  160.                     Max = Max * 2;
  161.                 }
  162.                 if (Max < (FormHeight - 50) && Max > (FormHeight - 50) / 2)
  163.                 {
  164.                     break;
  165.                 }
  166.             }
  167.             for (int i = 1; i <= Num; i++)
  168.             {
  169.                 for (int j = 1; j <= JNum; j++)
  170.                 {
  171.                     X[j, i] = (label3.Left - (label2.Left + label2.Width)) / Num * i - (label2.Left + label2.Width) + (Polebold + 1) * (j - 1) - label3.Width;//????
  172.                     Y[j, i] = label3.Top - 5 - (Int32.Parse(TypeValue[j, i]) * HeightXS / 100);
  173.                     YY[j, i] = Int32.Parse(TypeValue[j, i]);
  174.                     YY[j, i] = YY[j, i] * HeightXS / 100;
  175.                 }
  176.             }
  177.             TypeNameLabel = new System.Windows.Forms.Label[100];
  178.             for (int i = 1; i <= Num; i++)
  179.             {
  180.                 TypeNameLabel[i] = new Label();
  181.                 TypeNameLabel[i].Top = label3.Top;
  182.                 TypeNameLabel[i].Text = TypeName[i];
  183.                 TypeNameLabel[i].AutoSize = true;
  184.                 TypeNameLabel[i].Left = X[1, i] + Polebold * JNum / 2;
  185.                 this.Controls.Add(TypeNameLabel[i]);
  186.             }
  187.             TypeValueLabel = new System.Windows.Forms.Label[100, 100];
  188.             for (int i = 1; i <= Num; i++)
  189.             {
  190.                 for (int j = 1; j <= JNum; j++)
  191.                 {
  192.                     TypeValueLabel[j, i] = new Label();
  193.                     TypeValueLabel[j, i].Top = Y[j, i] - 20;
  194.                     TypeValueLabel[j, i].Text = TypeValue[j, i];
  195.                     TypeValueLabel[j, i].AutoSize = true;
  196.                     TypeValueLabel[j, i].Left = X[j, i];
  197.                     this.Controls.Add(TypeValueLabel[j, i]);
  198.                 }
  199.             }
  200.         }
  201.         public void FlexDiagramBegain()//Flex Diagram 初始化
  202.         {
  203.             for (int i = 1; i <= Num; i++)
  204.             {
  205.                 GetXmlFileValue(PathFileName, "ID" + i.ToString(), ref TypeName[i]);
  206.                 for (int j = 1; j <= JNum; j++)
  207.                 {
  208.                     GetXmlFileValue(PathFileName, "ID" + j.ToString() + "Num" + i.ToString(), ref TypeValue[j, i]);
  209.                 }
  210.             }
  211.             TypeNameLabel = new System.Windows.Forms.Label[100];
  212.             for (int i = 1; i <= Num; i++)
  213.             {
  214.                 TypeNameLabel[i] = new Label();
  215.                 TypeNameLabel[i].Top = label3.Top;
  216.                 TypeNameLabel[i].Text = TypeName[i];
  217.                 TypeNameLabel[i].AutoSize = true;
  218.                 TypeNameLabel[i].Left = (label3.Left - (label2.Left + label2.Width)) / Num * i - (label2.Left + label2.Width) - TypeNameLabel[i].Width / 2;
  219.                 this.Controls.Add(TypeNameLabel[i]);
  220.             }
  221.             Max = Int32.Parse(TypeValue[1, 1]);
  222.             Min = Int32.Parse(TypeValue[1, 1]);
  223.             for (int i = 1; i <= Num; i++)
  224.             {
  225.                 for (int j = 1; j <= JNum; j++)
  226.                 {
  227.                     if (Int32.Parse(TypeValue[j, i]) > Max)
  228.                     {
  229.                         Max = Int32.Parse(TypeValue[j, i]);
  230.                     }
  231.                     if (Int32.Parse(TypeValue[j, i]) < Min)
  232.                     {
  233.                         Min = Int32.Parse(TypeValue[j, i]);
  234.                     }
  235.                 }
  236.             }
  237.             for (int i = 1; i < 100; i++)
  238.             {
  239.                 if (Max > (FormHeight - 50))
  240.                 {
  241.                     HeightXS = HeightXS / 2;
  242.                     Max = Max / 2;
  243.                 }
  244.                 if (Max < (FormHeight - 50) / 2)
  245.                 {
  246.                     HeightXS = HeightXS * 2;
  247.                     Max = Max * 2;
  248.                 }
  249.                 if (Max < (FormHeight - 50) && Max > (FormHeight - 50) / 2)
  250.                 {
  251.                     break;
  252.                 }
  253.             }
  254.             for (int i = 1; i <= Num; i++)
  255.             {
  256.                 for (int j = 1; j <= JNum; j++)
  257.                 {
  258.                     X[j, i] = (label3.Left - (label2.Left + label2.Width)) / Num * i - (label2.Left + label2.Width);
  259.                     Y[j, i] = label3.Top - 5 - (Int32.Parse(TypeValue[j, i]) * HeightXS / 100);
  260.                     YY[j, i] = Int32.Parse(TypeValue[j, i]);
  261.                     YY[j, i] = YY[j, i] * HeightXS / 100;
  262.                 }
  263.             }
  264.             TypeValueLabel = new System.Windows.Forms.Label[100, 100];
  265.             for (int i = 1; i <= Num; i++)
  266.             {
  267.                 for (int j = 1; j <= JNum; j++)
  268.                 {
  269.                     TypeValueLabel[j, i] = new Label();
  270.                     TypeValueLabel[j, i].Top = Y[j, i] - 20;
  271.                     TypeValueLabel[j, i].Text = TypeValue[j, i];
  272.                     TypeValueLabel[j, i].AutoSize = true;
  273.                     TypeValueLabel[j, i].Left = (label3.Left - (label2.Left + label2.Width)) / Num * i - (label2.Left + label2.Width) - TypeValueLabel[j, i].Width / 2;
  274.                     this.Controls.Add(TypeValueLabel[j, i]);
  275.                 }
  276.             }
  277.         }
  278.         public void CakyDiagramBegain()//饼形图初始化
  279.         {
  280.             for (int i = 1; i <= Num; i++)
  281.             {
  282.                 GetXmlFileValue(PathFileName, "ID" + i.ToString(), ref TypeName[i]);
  283.                 GetXmlFileValue(PathFileName, "ID1Num" + i.ToString(), ref TypeValue[1, i]);
  284.             }
  285.             for (int i = 1; i <= Num; i++)
  286.             {
  287.                 GetXmlFileValue(PathFileName, "ID1Num" + i.ToString(), ref appvalue);
  288.                 SweepAngl[i] = Int32.Parse(appvalue);
  289.             }
  290.             AllSweep = 0;
  291.             for (int i = 1; i <= Num; i++)
  292.             {
  293.                 AllSweep = AllSweep + SweepAngl[i];
  294.             }
  295.             for (int i = 1; i <= Num; i++)
  296.             {
  297.                 SweepAngl[i] = (SweepAngl[i] * 360) / AllSweep;
  298.             }
  299.             //去掉白边
  300.             int tempSw;
  301.             for (int j = 1; j < 360; j++)
  302.             {
  303.                 tempSw = 0;
  304.                 for (int i = 1; i <= Num; i++)
  305.                 {
  306.                     tempSw = tempSw + SweepAngl[i];
  307.                 }
  308.                 if (tempSw < 360)
  309.                 {
  310.                     for (int k = 1; k <= 360 - tempSw; k++)
  311.                     {
  312.                         if (k < Num)
  313.                         {
  314.                             SweepAngl[k]++;
  315.                         }
  316.                         else
  317.                         {
  318.                             break;
  319.                         }
  320.                     }
  321.                 }
  322.                 if (tempSw >= 360)
  323.                 {
  324.                     break;
  325.                 }
  326.             }
  327.             StartAngl[1] = 0;
  328.             int tempAllSweep;
  329.             for (int i = 2; i <= Num; i++)
  330.             {
  331.                 tempAllSweep = 0;
  332.                 for (int j = 1; j <= i - 1; j++)
  333.                 {
  334.                     tempAllSweep = tempAllSweep + SweepAngl[j];
  335.                 }
  336.                 StartAngl[i] = tempAllSweep;
  337.             }
  338.             if (FormWidth >= FormHeight)
  339.             {
  340.                 KuanDu = FormHeight * 2 / 3;
  341.             }
  342.             else
  343.             {
  344.                 KuanDu = FormWidth * 2 / 3;
  345.             }
  346.             double Angle;
  347.             TypeNameLabel = new System.Windows.Forms.Label[100];
  348.             for (int i = 1; i <= Num; i++)
  349.             {
  350.                 Angle = (360 - StartAngl[i] + 90 - SweepAngl[i] / 2) * 3.141592653579 / 180;
  351.                 TypeNameLabel[i] = new Label();
  352.                 TypeNameLabel[i].Top = (int)((KuanDu + 60) / 2 * Math.Cos(Angle)) + (FormHeight / 6 + KuanDu / 2);
  353.                 TypeNameLabel[i].Text = TypeName[i];
  354.                 TypeNameLabel[i].AutoSize = true;
  355.                 TypeNameLabel[i].Left = (int)((KuanDu + 60) / 2 * Math.Sin(Angle)) + (FormWidth / 6 + KuanDu / 2);
  356.                 this.Controls.Add(TypeNameLabel[i]);
  357.             }
  358.             TypeValueLabel = new System.Windows.Forms.Label[100, 100];
  359.             string tempstr1;
  360.             for (int i = 1; i <= Num; i++)
  361.             {
  362.                 tempstr1 = (Int32.Parse(TypeValue[1, i]) * 1.0 / AllSweep * 100.0).ToString() + "    ";
  363.                 TypeValueLabel[1, i] = new Label();
  364.                 TypeValueLabel[1, i].Top = TypeNameLabel[i].Top;
  365.                 TypeValueLabel[1, i].Text = tempstr1.Substring(0, 5) + "%";
  366.                 TypeValueLabel[1, i].AutoSize = true;
  367.                 TypeValueLabel[1, i].Left = TypeNameLabel[i].Left + TypeNameLabel[i].Width + 2;
  368.                 this.Controls.Add(TypeValueLabel[1, i]);
  369.             }
  370.         }
  371.         #endregion
  372.         #region Draw Diagram函数
  373.         protected override void OnPaint(PaintEventArgs paintEvent)
  374.         {
  375.             Graphics g = paintEvent.Graphics;
  376.             SolidBrush brush = new SolidBrush(Color.Blue);
  377.             Pen pen = new Pen(Color.Black);
  378.             Pen pen2 = new Pen(Color.DarkGray);
  379.             SolidBrush[] bb;
  380.             bb = new SolidBrush[100];
  381.             bb[1] = new SolidBrush(Color.DarkRed);
  382.             bb[2] = new SolidBrush(Color.DarkSlateBlue);
  383.             bb[3] = new SolidBrush(Color.DarkGray);
  384.             bb[4] = new SolidBrush(Color.YellowGreen);
  385.             bb[5] = new SolidBrush(Color.DarkSalmon);
  386.             bb[6] = new SolidBrush(Color.DarkOrange);
  387.             bb[7] = new SolidBrush(Color.LightYellow);
  388.             bb[8] = new SolidBrush(Color.SlateBlue);
  389.             bb[9] = new SolidBrush(Color.Black);
  390.             bb[10] = new SolidBrush(Color.YellowGreen);
  391.             bb[11] = new SolidBrush(Color.DarkSeaGreen);
  392.             bb[12] = new SolidBrush(Color.DarkSlateGray);
  393.             bb[13] = new SolidBrush(Color.DarkTurquoise);
  394.             bb[14] = new SolidBrush(Color.DarkViolet);
  395.             bb[15] = new SolidBrush(Color.DeepPink);
  396.             Pen[] pp;
  397.             pp = new Pen[100];
  398.             pp[1] = new Pen(Color.DarkRed);
  399.             pp[2] = new Pen(Color.DarkSlateBlue);
  400.             pp[3] = new Pen(Color.DarkGray);
  401.             pp[4] = new Pen(Color.YellowGreen);
  402.             pp[5] = new Pen(Color.DarkSalmon);
  403.             pp[6] = new Pen(Color.DarkOrange);
  404.             pp[7] = new Pen(Color.LightYellow);
  405.             pp[8] = new Pen(Color.SlateBlue);
  406.             pp[9] = new Pen(Color.Black);
  407.             pp[10] = new Pen(Color.YellowGreen);
  408.             pp[11] = new Pen(Color.DarkSeaGreen);
  409.             pp[12] = new Pen(Color.DarkSlateGray);
  410.             pp[13] = new Pen(Color.DarkTurquoise);
  411.             pp[14] = new Pen(Color.DarkViolet);
  412.             pp[15] = new Pen(Color.DeepPink);
  413.             GetXmlFileValue(PathFileName, "DiagramType"ref appvalue);
  414.             switch (appvalue)
  415.             {
  416.                 case "histogram"://柱形图
  417.                     HistogramBegain();
  418.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label3.Left + label3.Width, label3.Top - 5);
  419.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label2.Left + label2.Width, label2.Top - 5);
  420.                     for (int i = 1; i <= Num; i++)
  421.                     {
  422.                         for (int j = 1; j <= JNum; j++)
  423.                         {
  424.                             g.FillRectangle(bb[j], X[j, i], Y[j, i], Polebold, YY[j, i]);
  425.                         }
  426.                     }
  427.                     break;
  428.                 case "flexdiagram"://折线图
  429.                     FlexDiagramBegain();
  430.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label3.Left + label3.Width, label3.Top - 5);
  431.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label2.Left + label2.Width, label2.Top - 5);
  432.                     for (int i = 1; i < Num; i++)
  433.                     {
  434.                         for (int j = 1; j <= JNum; j++)
  435.                         {
  436.                             g.DrawLine(pp[j], X[j, i], Y[j, i], X[j, i + 1], Y[j, i + 1]);
  437.                         }
  438.                     }
  439.                     for (int i = 1; i <= Num; i++)
  440.                     {
  441.                         for (int j = 1; j <= JNum; j++)
  442.                         {
  443.                             g.DrawLine(pen2, X[j, i], Y[j, i], X[j, i], label3.Top - 5);
  444.                         }
  445.                     }
  446.                     break;
  447.                 case "cakydiagram"://饼形图
  448.                     CakyDiagramBegain();
  449.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label3.Left + label3.Width, label3.Top - 5);
  450.                     g.DrawLine(pen, label2.Left + label2.Width, label3.Top - 5, label2.Left + label2.Width, label2.Top - 5);
  451.                     for (int i = 1; i <= Num; i++)
  452.                     {
  453.                         g.FillPie(bb[i], FormWidth / 6, FormHeight / 6, KuanDu, KuanDu, StartAngl[i], SweepAngl[i]);
  454.                     }
  455.                     break;
  456.                 default:
  457.                     break;
  458.             }
  459.         }
  460.         #endregion
  461.     }
  462. }
5.将用户控件拖入Form;

6.新建XML测试文件 XMLChart.xml:
  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <configuration>
  3.   <appSettings>
  4.     <add key="DiagramType" value="histogram" />
  5.     <add key="DiagramName" value="1-12月产品数量对比" />
  6.     <add key="XName" value="月份" />
  7.     <add key="YName" value="数量" />
  8.     <add key="JNum" value="2" />
  9.     <add key="Num" value="5" />
  10.     <add key="Text" value="yes" />
  11.     <add key="ID1" value="1月" />
  12.     <add key="ID2" value="2月" />
  13.     <add key="ID3" value="3月" />
  14.     <add key="ID4" value="4月" />
  15.     <add key="ID5" value="5月" />
  16.     <add key="ID6" value="6月" />
  17.     <add key="ID7" value="7月" />
  18.     <add key="ID8" value="8月" />
  19.     <add key="ID9" value="9月" />
  20.     <add key="ID10" value="10月" />
  21.     <add key="ID11" value="11月" />
  22.     <add key="ID12" value="12月" />
  23.     <add key="ID13" value="1月" />
  24.     <add key="ID14" value="2月" />
  25.     <add key="ID15" value="3月" />
  26.     <add key="ID16" value="4月" />
  27.     <add key="ID17" value="5月" />
  28.     <add key="ID18" value="6月" />
  29.     <add key="ID19" value="7月" />
  30.     <add key="ID20" value="8月" />
  31.     <add key="ID21" value="9月" />
  32.     <add key="ID22" value="10月" />
  33.     <add key="ID23" value="11月" />
  34.     <add key="ID24" value="12月" />
  35.     <add key="ID25" value="1月" />
  36.     <add key="ID1Num1" value="9" />
  37.     <add key="ID1Num2" value="5" />
  38.     <add key="ID1Num3" value="6" />
  39.     <add key="ID1Num4" value="7" />
  40.     <add key="ID1Num5" value="4" />
  41.     <add key="ID1Num6" value="6" />
  42.     <add key="ID1Num7" value="5" />
  43.     <add key="ID1Num8" value="3" />
  44.     <add key="ID1Num9" value="2" />
  45.     <add key="ID1Num10" value="1" />
  46.     <add key="ID1Num11" value="2" />
  47.     <add key="ID1Num12" value="2" />
  48.     <add key="ID1Num13" value="2" />
  49.     <add key="ID1Num14" value="2" />
  50.     <add key="ID1Num15" value="2" />
  51.     <add key="ID1Num16" value="2" />
  52.     <add key="ID1Num17" value="2" />
  53.     <add key="ID1Num18" value="2" />
  54.     <add key="ID1Num19" value="2" />
  55.     <add key="ID1Num20" value="2" />
  56.     <add key="ID1Num21" value="2" />
  57.     <add key="ID1Num22" value="2" />
  58.     <add key="ID1Num23" value="2" />
  59.     <add key="ID1Num24" value="2" />
  60.     <add key="ID1Num25" value="2" />
  61.     <add key="ID2Num1" value="4" />
  62.     <add key="ID2Num2" value="5" />
  63.     <add key="ID2Num3" value="4" />
  64.     <add key="ID2Num4" value="1" />
  65.     <add key="ID2Num5" value="5" />
  66.     <add key="ID2Num6" value="3" />
  67.     <add key="ID2Num7" value="4" />
  68.     <add key="ID2Num8" value="1" />
  69.     <add key="ID2Num9" value="2" />
  70.     <add key="ID2Num10" value="4" />
  71.     <add key="ID2Num11" value="5" />
  72.     <add key="ID2Num12" value="2" />
  73.     <add key="ID2Num13" value="2" />
  74.     <add key="ID2Num14" value="2" />
  75.     <add key="ID2Num15" value="2" />
  76.     <add key="ID2Num16" value="2" />
  77.     <add key="ID2Num17" value="2" />
  78.     <add key="ID2Num18" value="2" />
  79.     <add key="ID2Num19" value="2" />
  80.     <add key="ID2Num20" value="2" />
  81.     <add key="ID2Num21" value="2" />
  82.     <add key="ID2Num22" value="2" />
  83.     <add key="ID2Num23" value="2" />
  84.     <add key="ID2Num24" value="2" />
  85.     <add key="ID2Num25" value="2" />
  86.     <add key="ID3Num1" value="4" />
  87.     <add key="ID3Num2" value="5" />
  88.     <add key="ID3Num3" value="6" />
  89.     <add key="ID3Num4" value="1" />
  90.     <add key="ID3Num5" value="2" />
  91.     <add key="ID3Num6" value="2" />
  92.     <add key="ID3Num7" value="5" />
  93.     <add key="ID3Num8" value="2" />
  94.     <add key="ID3Num9" value="5" />
  95.     <add key="ID3Num10" value="7" />
  96.     <add key="ID3Num11" value="9" />
  97.     <add key="ID3Num12" value="2" />
  98.     <add key="ID3Num13" value="2" />
  99.     <add key="ID3Num14" value="2" />
  100.     <add key="ID3Num15" value="2" />
  101.     <add key="ID3Num16" value="2" />
  102.     <add key="ID3Num17" value="2" />
  103.     <add key="ID3Num18" value="2" />
  104.     <add key="ID3Num19" value="2" />
  105.     <add key="ID3Num20" value="2" />
  106.     <add key="ID3Num21" value="2" />
  107.     <add key="ID3Num22" value="2" />
  108.     <add key="ID3Num23" value="2" />
  109.     <add key="ID3Num24" value="2" />
  110.     <add key="ID3Num25" value="2" />
  111.     <add key="ID4Num1" value="2" />
  112.     <add key="ID4Num2" value="5" />
  113.     <add key="ID4Num3" value="4" />
  114.     <add key="ID4Num4" value="2" />
  115.     <add key="ID4Num5" value="4" />
  116.     <add key="ID4Num6" value="3" />
  117.     <add key="ID4Num7" value="1" />
  118.     <add key="ID4Num8" value="1" />
  119.     <add key="ID4Num9" value="4" />
  120.     <add key="ID4Num10" value="5" />
  121.     <add key="ID4Num11" value="8" />
  122.     <add key="ID4Num12" value="2" />
  123.     <add key="ID4Num13" value="2" />
  124.     <add key="ID4Num14" value="2" />
  125.     <add key="ID4Num15" value="2" />
  126.     <add key="ID4Num16" value="2" />
  127.     <add key="ID4Num17" value="2" />
  128.     <add key="ID4Num18" value="2" />
  129.     <add key="ID4Num19" value="2" />
  130.     <add key="ID4Num20" value="2" />
  131.     <add key="ID4Num21" value="2" />
  132.     <add key="ID4Num22" value="2" />
  133.     <add key="ID4Num23" value="2" />
  134.     <add key="ID4Num24" value="2" />
  135.     <add key="ID4Num25" value="2" />
  136.     <add key="ID5Num1" value="2" />
  137.     <add key="ID5Num2" value="5" />
  138.     <add key="ID5Num3" value="4" />
  139.     <add key="ID5Num4" value="2" />
  140.     <add key="ID5Num5" value="4" />
  141.     <add key="ID5Num6" value="3" />
  142.     <add key="ID5Num7" value="1" />
  143.     <add key="ID5Num8" value="1" />
  144.     <add key="ID5Num9" value="4" />
  145.     <add key="ID5Num10" value="5" />
  146.     <add key="ID5Num11" value="8" />
  147.     <add key="ID5Num12" value="2" />
  148.     <add key="ID5Num13" value="2" />
  149.     <add key="ID5Num14" value="2" />
  150.     <add key="ID5Num15" value="2" />
  151.     <add key="ID5Num16" value="2" />
  152.     <add key="ID5Num17" value="2" />
  153.     <add key="ID5Num18" value="2" />
  154.     <add key="ID5Num19" value="2" />
  155.     <add key="ID5Num20" value="2" />
  156.     <add key="ID5Num21" value="2" />
  157.     <add key="ID5Num22" value="2" />
  158.     <add key="ID5Num23" value="2" />
  159.     <add key="ID5Num24" value="2" />
  160.     <add key="ID5Num25" value="2" />
  161.     <add key="ID6Num1" value="2" />
  162.     <add key="ID6Num2" value="5" />
  163.     <add key="ID6Num3" value="4" />
  164.     <add key="ID6Num4" value="2" />
  165.     <add key="ID6Num5" value="4" />
  166.     <add key="ID6Num6" value="3" />
  167.     <add key="ID6Num7" value="1" />
  168.     <add key="ID6Num8" value="1" />
  169.     <add key="ID6Num9" value="4" />
  170.     <add key="ID6Num10" value="5" />
  171.     <add key="ID6Num11" value="8" />
  172.     <add key="ID6Num12" value="2" />
  173.     <add key="ID6Num13" value="2" />
  174.     <add key="ID6Num14" value="2" />
  175.     <add key="ID6Num15" value="2" />
  176.     <add key="ID6Num16" value="2" />
  177.     <add key="ID6Num17" value="2" />
  178.     <add key="ID6Num18" value="2" />
  179.     <add key="ID6Num19" value="2" />
  180.     <add key="ID6Num20" value="2" />
  181.     <add key="ID6Num21" value="2" />
  182.     <add key="ID6Num22" value="2" />
  183.     <add key="ID6Num23" value="2" />
  184.     <add key="ID6Num24" value="2" />
  185.     <add key="ID6Num25" value="2" />
  186.     <add key="ID7Num1" value="2" />
  187.     <add key="ID7Num2" value="5" />
  188.     <add key="ID7Num3" value="4" />
  189.     <add key="ID7Num4" value="2" />
  190.     <add key="ID7Num5" value="4" />
  191.     <add key="ID7Num6" value="3" />
  192.     <add key="ID7Num7" value="1" />
  193.     <add key="ID7Num8" value="1" />
  194.     <add key="ID7Num9" value="4" />
  195.     <add key="ID7Num10" value="5" />
  196.     <add key="ID7Num11" value="8" />
  197.     <add key="ID7Num12" value="2" />
  198.     <add key="ID7Num13" value="2" />
  199.     <add key="ID7Num14" value="2" />
  200.     <add key="ID7Num15" value="2" />
  201.     <add key="ID7Num16" value="2" />
  202.     <add key="ID7Num17" value="2" />
  203.     <add key="ID7Num18" value="2" />
  204.     <add key="ID7Num19" value="2" />
  205.     <add key="ID7Num20" value="2" />
  206.     <add key="ID7Num21" value="2" />
  207.     <add key="ID7Num22" value="2" />
  208.     <add key="ID7Num23" value="2" />
  209.     <add key="ID7Num24" value="2" />
  210.     <add key="ID7Num25" value="2" />
  211.     <add key="ID8Num1" value="2" />
  212.     <add key="ID8Num2" value="5" />
  213.     <add key="ID8Num3" value="4" />
  214.     <add key="ID8Num4" value="2" />
  215.     <add key="ID8Num5" value="4" />
  216.     <add key="ID8Num6" value="3" />
  217.     <add key="ID8Num7" value="1" />
  218.     <add key="ID8Num8" value="1" />
  219.     <add key="ID8Num9" value="4" />
  220.     <add key="ID8Num10" value="5" />
  221.     <add key="ID8Num11" value="8" />
  222.     <add key="ID8Num12" value="2" />
  223.     <add key="ID8Num13" value="2" />
  224.     <add key="ID8Num14" value="2" />
  225.     <add key="ID8Num15" value="2" />
  226.     <add key="ID8Num16" value="2" />
  227.     <add key="ID8Num17" value="2" />
  228.     <add key="ID8Num18" value="2" />
  229.     <add key="ID8Num19" value="2" />
  230.     <add key="ID8Num20" value="2" />
  231.     <add key="ID8Num21" value="2" />
  232.     <add key="ID8Num22" value="2" />
  233.     <add key="ID8Num23" value="2" />
  234.     <add key="ID8Num24" value="2" />
  235.     <add key="ID8Num25" value="2" />
  236.     <add key="ID9Num1" value="2" />
  237.     <add key="ID9Num2" value="5" />
  238.     <add key="ID9Num3" value="4" />
  239.     <add key="ID9Num4" value="2" />
  240.     <add key="ID9Num5" value="4" />
  241.     <add key="ID9Num6" value="3" />
  242.     <add key="ID9Num7" value="1" />
  243.     <add key="ID9Num8" value="1" />
  244.     <add key="ID9Num9" value="4" />
  245.     <add key="ID9Num10" value="5" />
  246.     <add key="ID9Num11" value="8" />
  247.     <add key="ID9Num12" value="2" />
  248.     <add key="ID9Num13" value="2" />
  249.     <add key="ID9Num14" value="2" />
  250.     <add key="ID9Num15" value="2" />
  251.     <add key="ID9Num16" value="2" />
  252.     <add key="ID9Num17" value="2" />
  253.     <add key="ID9Num18" value="2" />
  254.     <add key="ID9Num19" value="2" />
  255.     <add key="ID9Num20" value="2" />
  256.     <add key="ID9Num21" value="2" />
  257.     <add key="ID9Num22" value="2" />
  258.     <add key="ID9Num23" value="2" />
  259.     <add key="ID9Num24" value="2" />
  260.     <add key="ID9Num25" value="2" />
  261.     <add key="ID10Num1" value="2" />
  262.     <add key="ID10Num2" value="5" />
  263.     <add key="ID10Num3" value="4" />
  264.     <add key="ID10Num4" value="2" />
  265.     <add key="ID10Num5" value="4" />
  266.     <add key="ID10Num6" value="3" />
  267.     <add key="ID10Num7" value="1" />
  268.     <add key="ID10Num8" value="1" />
  269.     <add key="ID10Num9" value="4" />
  270.     <add key="ID10Num10" value="5" />
  271.     <add key="ID10Num11" value="8" />
  272.     <add key="ID10Num12" value="2" />
  273.     <add key="ID10Num13" value="2" />
  274.     <add key="ID10Num14" value="2" />
  275.     <add key="ID10Num15" value="2" />
  276.     <add key="ID10Num16" value="2" />
  277.     <add key="ID10Num17" value="2" />
  278.     <add key="ID10Num18" value="2" />
  279.     <add key="ID10Num19" value="2" />
  280.     <add key="ID10Num20" value="2" />
  281.     <add key="ID10Num21" value="2" />
  282.     <add key="ID10Num22" value="2" />
  283.     <add key="ID10Num23" value="2" />
  284.     <add key="ID10Num24" value="2" />
  285.     <add key="ID10Num25" value="2" />
  286.   </appSettings>
  287. </configuration>

你可能感兴趣的:(xml,windows,测试,360,WinForm,产品)