したがって、これは非常に単純なはずですが、同様の質問をいくつか見ましたが、答えが見つかりません。
私にはForm1
クラスとResistor
クラスがあります。Form1
クラス内にはPanel
(名前を に変更しましたCanvas
) があり、メソッド内ではクラスからCanvas_Paint
メソッドを呼び出していますが、何も描画していません。Draw
Resistor
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.Graphics
Draw
Resistor
私はC#が初めてなので、助けていただければ幸いです。
編集:ダウンロードして試してみたい場合 は、プロジェクトをgithubに置きます。
編集:
問題は、ボタンをクリックした後、パネル Paint メソッドが呼び出されなかったことです。解決策は、メソッドCanvas.Invalidate
内に追加することでしたAddResistor_Click