Создание круговой / линейчатой ​​графики с использованием библиотеки классов - PullRequest
0 голосов
/ 28 ноября 2011

Я хочу создать библиотеку классов, которая может рисовать круговую или гистограмму. я использую следующие коды ...

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 ]

1 голос
/ 28 ноября 2011

Метод CreateGraphics () относится к классу Control.Если Pasta предполагается как элемент управления, то вы должны извлечь его из Control.

т.е.

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

Кстати, если вы пишете элемент управления, вы хотите нарисовать его в методе OnPaint (), и вам не нужно вызывать CreateGraphics() потому что один уже создан для вас.Вот очень быстрый пример, чтобы проиллюстрировать, но я не разработчик элементов управления, поэтому, пожалуйста, не считайте это правильным подходом.

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 экземпляров вместо того, чтобы воссоздавать их каждый раз.

1 голос
/ 28 ноября 2011

this.CreateGraphics (); указывает, что метод с именем CreateGraphics будет существовать в Pasta. Где этот метод? Похоже, что он вообще отсутствует. Я предполагаю, что вы используете код, который ожидал (это), чтобы быть элементом управления или формы? Возможно, передать ссылку на элемент управления и вызвать createGraphics для этого?

вы можете сделать что-то вроде

Graphics g = new Control().CreateGraphics();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...