使用类库创建饼图/条形图

时间:2011-11-28 17:44:36

标签: c# graphics

我想创建一个能够绘制饼图或条形图的类库。 我正在使用以下代码......

Graphics g = CreateGraphics();

当我使用该代码时,visual studio告诉我你不能使用dll文件(类库)。

我仍然有问题如何解决这个问题... o_O

询问更多信息:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Data;


namespace KouChart
{
    public class Pasta
    {
        public void PastaCiz(int a, int b, int c)
        {
            float toplam = a + b + c;
            float deg1 = (a / toplam) * 360;
            float deg2 = (b / toplam) * 360;
            float deg3 = (c / toplam) * 360;
            Pen p = new Pen(Color.Red, 2);
            Graphics g = this.CreateGraphics();
            Rectangle rec = new Rectangle(50, 12, 150, 150);
            Brush b1 = new SolidBrush(Color.Red);
            Brush b2 = new SolidBrush(Color.Black);
            Brush b3 = new SolidBrush(Color.Blue);
            Brush b4 = new SolidBrush(Color.Yellow);

            g.DrawPie(p, rec, 0, deg1);
            g.FillPie(b1, rec, 0, deg1);
            g.DrawPie(p, rec, deg1, deg2);
            g.FillPie(b2, rec, deg1, deg2);
            g.DrawPie(p, rec, deg2 + deg1, deg3);
            g.FillPie(b3, rec, deg2 + deg1, deg3);
        }
    }
}

和错误:错误1'KouChart.Pasta'不包含'CreateGraphics'的定义,并且没有扩展方法'CreateGraphics'可以找到接受类型'KouChart.Pasta'的第一个参数(你是否缺少using指令?或汇编参考?)C:\ Users \ Muyu \ Documents \ Visual Studio 2010 \ Projects \ KouChart \ KouChart \ Pasta.cs 20 31 KouChart

2 个答案:

答案 0 :(得分:1)

this.CreateGraphics();表示在Pasta上会存在一个名为CreateGraphics的方法。这种方法在哪里?它似乎完全没有了。我猜你正在使用预期(这)作为控件或表单的代码?也许传入对控件的引用并调用createGraphics?

你可以做点什么吗

Graphics g = new Control().CreateGraphics();

答案 1 :(得分:1)

CreateGraphics()方法属于Control类。如果Pasta应该是一个控件,那么您应该从Control派生它。

即。

public class Pasta : Control
{
    public void PastaCiz(int a, int b, int c)          
    { ... }
}

顺便说一下,如果你正在编写一个控件,你会想要在OnPaint()方法中绘制它,而你不需要调用CreateGraphics(),因为已经为你创建了一个。{1}}。这是一个非常快速的例子来说明,但我不是一个控制开发人员,所以请不要认为这是正确的方法。

public class Pasta : Control
{
    int a;
    int b;
    int c;

    public void PastaCiz(int a, int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        float toplam = a + b + c;
        float deg1 = (a / toplam) * 360;
        float deg2 = (b / toplam) * 360;
        float deg3 = (c / toplam) * 360;
        Pen p = new Pen(Color.Red, 2);
        Graphics g = e.Graphics;                           <-- note
        Rectangle rec = new Rectangle(50, 12, 150, 150);
        Brush b1 = new SolidBrush(Color.Red);
        Brush b2 = new SolidBrush(Color.Black);
        Brush b3 = new SolidBrush(Color.Blue);
        Brush b4 = new SolidBrush(Color.Yellow);
        g.DrawPie(p, rec, 0, deg1);
        g.FillPie(b1, rec, 0, deg1);
        g.DrawPie(p, rec, deg1, deg2);
        g.FillPie(b2, rec, deg1, deg2);
        g.DrawPie(p, rec, deg2 + deg1, deg3);
        g.FillPie(b3, rec, deg2 + deg1, deg3);
    }
}

另请注意,缓存这些PenBrush实例会更高效,而不是每次都重新创建它们。