请教C#中如何在 WinForm中画曲线图

 我来答
魔法软糖™
2016-12-02 · TA获得超过837个赞
知道小有建树答主
回答量:822
采纳率:94%
帮助的人:140万
展开全部

软糖来回答罗。。。使用GDI+绘图技术即可。

首先引用System.Drawing命名空间。

给你绘制弧线、曲线和路线的参考代码:

Graphic 画纸 = Form1.CreateGraphics();
        public void 绘制弧线(Pen 钢笔, int X1, int Y1, int 宽, int 高, int 起始角, int 结束角)
        { 画纸.DrawArc(钢笔, X1, Y1, 宽, 高, 起始角, 结束角); }
        public void 绘制弧线(Pen 钢笔, Rectangle RECT, int 起始角, int 结束角)
        { 画纸.DrawArc(钢笔, RECT, 起始角, 结束角); }
        
        public void 绘制曲线(Pen 钢笔, Point[ ] 点组, float 张力)
        { 画纸.DrawCurve(钢笔, 点组, 张力); }
        public void 绘制曲线(Pen 钢笔, PointF[ ] 点组, int 偏移, int 段数)
        { 画纸.DrawCurve(钢笔, 点组, 偏移, 段数); }
        public void 绘制曲线(Pen 钢笔, PointF[ ] 点组, int 偏移, int 段数, float 张力)
        { 画纸.DrawCurve(钢笔, 点组, 偏移, 段数, 张力); }
        
        public void 绘制路线(Pen 钢笔, GraphicsPath 路线)
        { 画纸.DrawPath(钢笔, 路线); }
        public void 填充路线(Brush 画笔, GraphicsPath 路线)
        { 画纸.FillPath(画笔, 路线); }

另外要想不闪烁,请使用双缓冲技术:

namespace 引擎.绘图.GDI
{
    /// <summary>
    /// 为绘图提供双缓冲。提供建立多层画纸的方法并返回用于绘制的画纸。
    /// </summary>
    public class 画板
    {
        private BufferedGraphicsContext M画板;
        private List<BufferedGraphics> M画纸;
        public int 画纸数 { get; private set; }
        private int M当前号 = 0;
        public Graphics 当前画纸 ( ) { return M画纸[M当前号].Graphics; }
        public Graphics 画纸 ( int 号 ) { return M画纸[号].Graphics; }

        public Rectangle 显示矩形 { get; set; }
        public int 高 { get { return 显示矩形.Height; } }
        public int 宽 { get { return 显示矩形.Width; } }
        /// <summary>
        /// 新建画板并关联到指定区域的画纸上
        /// </summary>
        /// <param name="关联画纸">关联的Graphic,通常为Form.CreateGraphics</param>
        /// <param name="关联矩形">关联的矩形区域,作为画板的工作区</param>
        /// <param name="层数">画板内含的缓冲区个数,不建议大于4个,默认为2个</param>
        public 画板 (Graphics 关联画纸, Rectangle 关联矩形, int 层数 = 2 )
        { 
            M画纸 = new List<BufferedGraphics>();
            M画板 = BufferedGraphicsManager.Current;
            显示矩形 = 关联矩形;           
            画纸数 = 层数;
            for (int i=1; i<=画纸数 ;i++)
            {
               BufferedGraphics t画纸;
                t画纸 = M画板.Allocate(关联画纸, 显示矩形);
                M画纸.Add(t画纸);
            }
            M当前号 = 0;
        }

        public event Action 呈现事件;
        public void 引发呈现事件 ( ) { if (呈现事件 != null) { 呈现事件(); } }
        public void 呈现 ( )
        { 
            M当前号++;
            if (M当前号 > 画纸数 - 1) { M当前号 = 0;}
            M画纸[M当前号].Render();
            引发呈现事件();
        }
    }
}
yang12160098
2016-11-17 · TA获得超过372个赞
知道小有建树答主
回答量:411
采纳率:80%
帮助的人:109万
展开全部
百度一下C# chart或者zedgraph
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式