0

したがって、これは非常に単純なはずですが、同様の質問をいくつか見ましたが、答えが見つかりません。

私にはForm1クラスとResistorクラスがあります。Form1クラス内にはPanel(名前を に変更しましたCanvas) があり、メソッド内ではクラスからCanvas_Paintメソッドを呼び出していますが、何も描画していません。DrawResistor

Form1 クラス:

public partial class Form1 : Form
{
    static float lineWidth = 2.0F;
    static float backgroundLineWidth = 2.0F;
    static Pen pen = new Pen(Color.Yellow, lineWidth);
    static Pen backgroundPen = new Pen(Color.LightGray, backgroundLineWidth);
    private bool drawBackground = true;
    private List<Resistor> resistors = new List<Resistor>();                

    public Form1()
    {
        InitializeComponent();
    }

    private void Canvas_Paint(object sender, PaintEventArgs e)
    {
        if (drawBackground)
        {
            Console.WriteLine("Drawing background...");
            Draw_Background(e.Graphics, backgroundPen);
        }

        if (resistors != null)
        {
            foreach (Resistor r in resistors)
            {
                //This does not work.
                r.Draw(e.Graphics);
            }
        }

        //The line below draws the line fine.
        e.Graphics.DrawLine(pen, 0, 0, 100, 100);
    }

    private void Draw_Background(Graphics g, Pen pen)
    {            
        for (int i = 0; i < Canvas.Width; i += 10)
        {
            g.DrawLine(pen, new Point(i, 0), new Point(i, Canvas.Height));          
        }
        for (int j = 0; j < Canvas.Height; j += 10)
        {
            g.DrawLine(pen, new Point(0, j), new Point(Canvas.Width, j));
        }

        drawBackground = false;
    }

    private void AddResistor_Click(object sender, EventArgs e)
    {
        resistors.Add(new Resistor());
        Console.WriteLine("Added a Resistor...");
    }        
}

抵抗クラス:

public class Resistor
{
    static private Point startingPoint;
    static Pen defaultPen;
    private Point[] points;

    public Resistor()
    {
        startingPoint.X = 100;
        startingPoint.Y = 100;

        defaultPen = new Pen(Color.Yellow, 2.0F);

        points = new Point[] {
            new Point( 10,  10),
            new Point( 10, 100),
            new Point(200,  50),
            new Point(250, 300) 
        };

    }

    public void Draw(Graphics g)
    {
        //Is this drawing somewhere else?
        g.DrawLines(defaultPen, points);            
    }
}

この場合、オブジェクトをクラスのメソッドに渡すことを提案するこの質問を見てきましたが、機能していません。e.GraphicsDrawResistor

私はC#が初めてなので、助けていただければ幸いです。

編集:ダウンロードして試してみたい場合 は、プロジェクトをgithubに置きます。

編集: 問題は、ボタンをクリックした後、パネル Paint メソッドが呼び出されなかったことです。解決策は、メソッドCanvas.Invalidate内に追加することでしたAddResistor_Click

4

2 に答える 2

0

問題は、ボタンがクリックされたときにパネルのペイント メソッドが呼び出されないことでした。解決策は、メソッドCanvas.Invalidate内に追加することでした。AddResistor_Click

private void AddResistor_Click(object sender, EventArgs e)
    {
        resistors.Add(new Resistor());
        Console.WriteLine("Added a Resistor...");
        Canvas.Invalidate();
    }
于 2013-08-04T20:56:10.483 に答える