我刚刚开始看C#,连初学者都不算,今天头儿让我用C#做一个绘制棒装图的程序。以前我用VB做过一个,但是效果不是很好。那位大侠帮帮忙,指导一下小弟。不胜感激。C#里面有类似于VB中的MSchart控件的吗

解决方案 »

  1.   

    平身!
    朕赐你一个好东东:
    Dundas Chart
    :P
      

  2.   

    to wangxiaohu(如花) :
    能发到.cn,谢谢
      

  3.   

    Dundas Chart专业级的,用好没有商量
      

  4.   

    不能重定义坐标点
    用GDI+
    可以设定一个坐标点,其他都是相对坐标,根据坐标原点进行换算
      

  5.   

    谢谢楼上的,如果我想在我画的棒图的下面加文字,该怎么做呢。在VB里有个.print ***,可是C#里没有,帮帮我吧。
      

  6.   

    //柱状图
    case EffectType.Bar:
    //计算每个柱的宽度
    int nBarWidth = 0;
    if(_ArrayCount == 1)
    {
    nBarWidth = (_Width-_Y)/_xDiv/2;
    }
    else
    {
    nBarWidth = (_Width-_Y)/_xDiv/(_ArrayCount);
    }
    //循环画出所以柱图
    for(int i = 0 ; i < LineValue.Length;i++)
    {
    //柱图左上角X,Y的坐标
    int nBarx = XYpoint[i].X+nBarWidth*_BarCount;
    int nBary = XYpoint[i].Y;
    //柱图的高度
    int nBarHeight = _Height - XYpoint[i].Y-_X;
    //在指定的坐标画出矩型并填充
    Rectangle newRec = new Rectangle(nBarx,nBary,nBarWidth,nBarHeight);
    g.FillRectangle(new SolidBrush(LineColor),newRec);
    //画出此点值
    g.DrawString(LineValue[i].ToString(),_Font,sBrush,nBarx,(nBary-(_Font.Height)-2));
    }
    //计算画了第几个柱图了
    _BarCount++;
    break;
    //曲线图和柱图
    case EffectType.LineAndBar:
           
    #region 曲线图
    //判断是否符合作图条件
    //至少需要二点才能确定一条直线
    if(LineValue.Length > 1)
    {
    //定义作图线的效果
    Pen LinePen = new Pen(LineColor);
    //线的宽度
    LinePen.Width = _LineWidth;
    //取得第一个点
    Point Pxy1 = XYpoint[0];
    //是否显示出坐标点的(X,Y)值
    if(_ShowNotice == true)
    {
    //g.DrawString("[ "+LineValue[0].ToString()+",1]",_Font, sBrush,Pxy1.X,Pxy1.Y);
    }
    //画出坐标值的点
    g.DrawString("·",LineFont,sBrush,Pxy1.X-8,Pxy1.Y-16);
    //取得一下点坐标点
    Point Pxy2 = XYpoint[1];
    //画出所有坐标点并联机
    int i = 2;
    do
    {
    //画二个坐标点间联机
    g.DrawLine(LinePen,Pxy1,Pxy2);
    //是否显示出坐标点的(X,Y)值
    if(_ShowNotice == true)
    {
    //g.DrawString("[ "+LineValue[i-1].ToString()+","+(i).ToString()+" ]",_Font, sBrush,Pxy2.X,Pxy2.Y);
    }
    g.DrawString("·",LineFont, sBrush,Pxy2.X-8,Pxy2.Y-16);

    Pxy1=Pxy2;

    Pxy2=XYpoint[i];

    i++;
    }
    while(i < LineValue.Length);
    //画最后一条
    g.DrawLine(LinePen,Pxy1,Pxy2);
    //是否显示出坐标点的(X,Y)值
    if(_ShowNotice == true)
    {
    //g.DrawString("[ "+LineValue[i-1].ToString()+","+(i).ToString()+" ]",_Font, sBrush,Pxy2.X,Pxy2.Y);
    }
    g.DrawString("·",LineFont, sBrush,Pxy2.X-9,Pxy2.Y-16);
    }
    #endregion #region 柱图
    //计算每个柱的宽度
    //int nBarWidth = 0;
    if(_ArrayCount == 1)
    {
    nBarWidth = (_Width-_Y)/_xDiv/2;
    }
    else
    {
    nBarWidth = (_Width-_Y)/_xDiv/(_ArrayCount);
    }
    //循环画出所以柱图
    for(int i = 0 ; i < LineValue.Length;i++)
    {
    //柱图左上角X,Y的坐标
    int nBarx = XYpoint[i].X+nBarWidth*_LineAndBarCount;
    int nBary = XYpoint[i].Y;
    //柱图的高度
    int nBarHeight = _Height - XYpoint[i].Y-_X;
    //在指定的坐标画出矩型并填充
    Rectangle newRec = new Rectangle(nBarx,nBary,nBarWidth,nBarHeight);
    g.FillRectangle(new SolidBrush(LineColor),newRec);
    //画出此点值
    g.DrawString(LineValue[i].ToString(),_Font,sBrush,nBarx,(nBary-(_Font.Height)-2));
    }
    //计算画了第几个柱图了
    _LineAndBarCount++;

    break;

    #endregion

    //错误
    default:
    throw (new Exception("错误:\r\n\r\n未定义的效果类型!"));
    }
      

  7.   

    to dunao([捐款給印尼的中國人就是犯賤]) :
    谢谢,我是个初学者,以后可能还有许多问题要请教。刚下完,看看。