有什么控件,自带的有没有的,要用程序画的话怎么画

解决方案 »

  1.   

    对了我想把统计图放在一个panl容器中显示的
      

  2.   

    int xLength = _addTime.Length;//横坐标的个数
    int xSplit = 40;//每个坐标的间隔 //左右个保留的宽度
    int xLeft = 80;
    int xRight = 50;        //上下个 保留高度
            int xTop = 50;
            int xHeight = 240;//X图实际的高度
            int xBottom = 20;        int timeHeight = 30;//时间区高度
            int rTop = 20;//R图的
            int rHeight = 100;
            int rBottom = 20;
            int imgWidth = xLength * xSplit;//实际做图的宽度
            //画布大小 
            int picWidth = imgWidth + xLeft + xRight;//画布的宽度
            int picHeight = xTop + xHeight + xBottom + timeHeight + rTop + rHeight + rBottom;//画布的高度  
            //USL 与 LSL 固定下来 为        
            int imgUSL = xTop;//USL的实际坐标
            int imgLSL = xTop + xHeight;//LSL的实际坐标        int imgUCL = Convert.ToInt32(FormatY(_UCL.ToString(), _USL, _LSL, imgUSL, imgLSL));//UCL的实际坐标  
            Bitmap image = new Bitmap(picWidth, picHeight);//创建一张图片        Graphics g = Graphics.FromImage(image);        try
            {
                //清空图片背景色
                g.Clear(Color.White);            Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular);            Font fontPoint = new System.Drawing.Font("Arial", 8, FontStyle.Regular);//点的数据            LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true);//画布大小
                //区域填充颜色  
                g.FillRectangle(Brushes.AliceBlue, 0, 0, picWidth, picHeight);//画布区域                      StringFormat formatR = new StringFormat();            formatR.LineAlignment = StringAlignment.Center;//中心位置            formatR.FormatFlags = StringFormatFlags.DirectionRightToLeft;//左右            StringFormat formatL = new StringFormat();            formatL.LineAlignment = StringAlignment.Center;//中心位置
                //USL
                g.FillRectangle(Brushes.Black, xLeft, imgUSL - 1, imgWidth, 1); //画出USL 如果为2 的话比较粗了            g.DrawString(_USL.ToString(), font, Brushes.Black, xLeft, imgUSL, formatR); //数字            g.DrawString("USL", font, Brushes.Black, imgWidth + xLeft + 10, imgUSL, formatL); //USL
                //x轴 时间点
                int pX = xLeft + Convert.ToInt32(xSplit * 0.5) - 10;// 中心位置    并且便宜 10             int imgTimeHeigth = xTop + xHeight + xBottom;            for (int i = 0; i < _addTime.Length; i++)
                {
                    g.DrawString(_addTime[i].ToString(), font, Brushes.Black, pX, imgTimeHeigth); //设置文字内容及输出位置   中心位置                pX += xSplit;
                }            //显示折线效果
                Font font3 = new System.Drawing.Font("Arial", 10, FontStyle.Bold);            SolidBrush mybrush = new SolidBrush(Color.Black);            Point[] pointsX = new Point[xLength];//多少个点的            int intTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置            StringFormat formatPoint = new StringFormat();//X图数字的输出格式                      formatPoint.Alignment = StringAlignment.Far;            formatPoint.FormatFlags = StringFormatFlags.DirectionVertical;            for (int i = 0; i < _douX.Length; i++)
                {                pointsX[i].X = intTempX;                pointsX[i].Y = Convert.ToInt32(FormatY(_douX[i].ToString(), _USL, _LSL, imgUSL, imgLSL));                intTempX = intTempX + xSplit;                //绘制数字
                    g.DrawString(_douX[i].ToString(), fontPoint, Brushes.Black, pointsX[i].X, pointsX[i].Y, formatPoint);                g.FillEllipse(Brushes.DarkBlue, pointsX[i].X - 2, pointsX[i].Y - 2, 5, 5);            }
                Pen mypen = new Pen(brush, 1);
                g.DrawLines(mypen, pointsX); //绘制折线
                //------------------------end X图的----------------------            //------------------------start R 图的---------------------------------            int imgRUCL = xTop + xHeight + xBottom + timeHeight + rTop;
                int imgRLCL = xTop + xHeight + xBottom + timeHeight + rTop + rHeight;
                int imgRCL = Convert.ToInt32(FormatY(_RCL.ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//RCL的实际坐标            int imgRU3 = Convert.ToInt32(Format3(_RUCL, _RCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//上三等份 的高度            int imgRL3 = Convert.ToInt32(Format3(_RCL, _RLCL, _RUCL, _RLCL, imgRUCL, imgRLCL));//下三等份 的高度            //RUCL
                g.FillRectangle(Brushes.MistyRose, xLeft, imgRUCL, imgWidth, imgRU3); //画出USL 上粉色
                g.DrawString(_RUCL.ToString(), font, Brushes.Black, xLeft, imgRUCL, formatR); //设置文字内容及输出位置
                g.DrawString("UCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRUCL, formatL); //设置文字内容及输出位置            g.FillRectangle(Brushes.LightYellow, xLeft, imgRUCL + imgRU3, imgWidth, imgRU3); //上黄            g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL - imgRU3, imgWidth, imgRU3); //上绿
                //RCL
                g.FillRectangle(Brushes.Black, xLeft, imgRCL, imgWidth, 1); //画出UCL 画的区域高度为 2            g.FillRectangle(Brushes.LightCyan, xLeft, imgRCL + 1, imgWidth, imgRL3); //下绿            g.DrawString(_RCL.ToString(), font, Brushes.Black, xLeft, imgRCL, formatR); //设置文字内容及输出位置             g.DrawString("CL", font, Brushes.Black, imgWidth + xLeft + 10, imgRCL, formatL); //设置文字内容及输出位置            g.FillRectangle(Brushes.LightYellow, xLeft, imgRCL + imgRL3, imgWidth, imgRL3); //下黄            //RLCL
                g.FillRectangle(Brushes.MistyRose, xLeft, imgRLCL - imgRL3, imgWidth, imgRL3); //下粉色
                g.DrawString(_RLCL.ToString(), font, Brushes.Black, xLeft, imgRLCL, formatR); //设置文字内容及输出位置            g.DrawString("LCL", font, Brushes.Black, imgWidth + xLeft + 10, imgRLCL, formatL); //设置文字内容及输出位置
                //显示折线效果
                Font _RFont = new System.Drawing.Font("Arial", 8, FontStyle.Regular);            SolidBrush _RMybrush = new SolidBrush(Color.Black);            Point[] _RPoints = new Point[xLength];//多少个点的            int intRTempX = xLeft + Convert.ToInt32(xSplit * 0.5);// 中心位置            StringFormat _RFormat = new StringFormat();//X图数字的输出格式                      _RFormat.Alignment = StringAlignment.Near;//下方
                _RFormat.FormatFlags = StringFormatFlags.DirectionVertical;//方向垂直            for (int i = 0; i < _douR.Length; i++)
                {                _RPoints[i].X = intRTempX;//横坐标                _RPoints[i].Y = Convert.ToInt32(FormatY(_douR[i].ToString(), _RUCL, _RLCL, imgRUCL, imgRLCL));//纵坐标                intRTempX = intRTempX + xSplit;                //绘制数字
                    g.DrawString(_douR[i].ToString(), _RFont, Brushes.LightSeaGreen, _RPoints[i].X, _RPoints[i].Y, _RFormat);                g.FillEllipse(Brushes.LightSeaGreen, _RPoints[i].X - 2, _RPoints[i].Y - 2, 5, 5);            }
                LinearGradientBrush brush2 = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.LightSeaGreen, Color.LightSeaGreen, 1.2f, true);//画布大小
                Pen _Rmypen = new Pen(brush2, 1);
                g.DrawLines(_Rmypen, _RPoints); //绘制折线            //------------------------end  R 图的---------------------------------            try
                {
                    string strImg = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + "CharXR.gif";
                    //删除该文件夹中的所有 图片 
                    image.Save(Server.MapPath("rpChart//" + strImg));                sb.Append(strImg + "#");//图片名称
                    for (int i = 0; i < _dataId.Length; i++)
                    {
                        //数据的ID 以及X图的坐标 
                        sb.Append("¥" + _dataId[i] + "@" + pointsX[i].X + "@" + pointsX[i].Y + "");
                        //R图热点
                        sb.Append("¥" + _dataId[i] + "@" + _RPoints[i].X + "@" + _RPoints[i].Y + "");
                    }
                }
                catch
                {            }
                return sb.ToString().Trim('¥');//返回数据
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
      

  3.   

    参考一下,网上N多,就不知道百度一下?http://www.cnblogs.com/Terrylee/archive/2006/03/04/252178.html
      

  4.   

    用chart类工具做,自己画太崩溃了