|
2008/02/11(Mon) 16:01:19 編集(投稿者)
(変更履歴) 1.コードのミスを修正。 (DrawingMOD.DrawMovingObjects()内。修正前のコードでもエラーが出なかったため気づくのが遅れました) this.DrawPanel(this, e); ↓ this.DrawPanel(this.m_control, e);
はじめまして、引っ込んだ(略)と申します。 お答えいたします。 以下のコードで試してみてください。 //【フォームのコード】 public partial class Form3 : Form { DrawingMOD myDraw; //Form1で共通に使用するオブジェクト変数の宣言
public Form3() { InitializeComponent(); this.myDraw = new DrawingMOD(this.panel1); myDraw.DrawPanel += new DrawOnPanel(myDraw_DrawPanel); }
//描画に使用する3点の座標 private float xOne = 50.01f; private float yOne = 100.01f; private float xTwo = 100.01f; private float yTwo = 100.01f; private float xThree = 120.01f; private float yThree = 120.01f;
private void button1_Click(object sender, EventArgs e) { this.myDraw.DrawMovingObjects(); }
//myDraw_DrawPanelイベントハンドラ private void myDraw_DrawPanel(object sender, PaintEventArgs e) { Panel panel = sender as Panel; e.Graphics.Clear(Color.Green);
//ペンの色を定義 int cRed = 200; int cGreen = 100; int cBlue = 100;
//折れ線に使用する3点をPointF[]に格納する PointF[] myPoints = new PointF[3]; myPoints[0] = new PointF(xOne, yOne); myPoints[1] = new PointF(xTwo, yTwo); myPoints[2] = new PointF(xThree, yThree);
Pen pen = new Pen(Color.FromArgb(cRed, cGreen, cBlue), 4); //ペンを作成
pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; //折れ線を矢印にする e.Graphics.DrawLines(pen, myPoints); //折れ線を描く
////////e.Dispose(); //Graphicsオブジェクトの破棄 }
}//End Class
public delegate void DrawOnPanel(object sender, PaintEventArgs e);//デリゲート
class DrawingMOD {
public event DrawOnPanel DrawPanel; //イベントフィールド
private Control m_control;
//コンストラクタ public DrawingMOD(Control c) { this.m_control = c; //this.m_control.Paint += new PaintEventHandler(this.control_paint); }
// ↓パネルに折れ線を描画するメソッド(その1) // ↓Paintイベントで描画する場合はこちら。 //public void DrawMovingObjects() //{ // this.m_control.Invalidate(); //} //private void control_paint(object sender, PaintEventArgs e) //{ // this.DrawPanel(sender, e); //}
// ↓パネルに折れ線を描画するメソッド(その2) // ↓Buttonクリック時のみ描画する場合はこちら。 public void DrawMovingObjects() { PaintEventArgs e = new PaintEventArgs(m_control.CreateGraphics(), m_control.ClientRectangle); /////////////this.DrawPanel(this, e); // [修正前] this.DrawPanel(this.m_control, e); // [修正後] e.Graphics.Dispose(); }
}//End Class
以上です。
|