我想创建一个能够绘制饼图或条形图的类库。 我正在使用以下代码......
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
答案 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);
}
}
另请注意,缓存这些Pen
和Brush
实例会更高效,而不是每次都重新创建它们。