请教C#中如何在 WinForm中画曲线图
展开全部
软糖来回答罗。。。使用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();
引发呈现事件();
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询