ایراد پست شماره 9: رسم یک چندضلعی توپر روی یک فرم
ابتدا باید توجه داشته باشید که GDI Object هایی که شما مالک اونها هستید رو باید حتما Dispose کنید. بعنوان نمونه، متغیر blackPen که توسط برنامه نویس ایجاد شده، باید توسط برنامه نویس هم به سیستم برگردونده بشه. نکته دوم، نحوه مطلع شدن از رخداد Paint در خود کلاس صادر کننده event هستش. برای مطلع شدن از هر رخدادی در خود کلاس، باید متود متناظر با اون رویداد رو override کنید (اگر قراره کلاسی هم ایجاد کنید که event خاصی رو صادر کنه، best patterns & practices ما رو به نوشتن چنین متودهای virtual ای ترغیب میکنه). بنابراین، جای Form1_Load باید متود OnLoad رو override کنید، جای Form1_FormClosing، OnFormClosing و بهمین شیوه:
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
using (Pen blackPen = new Pen(Color.Black, 3))
{
Point point1 = new Point(30, 50);
Point point2 = new Point(100, 25);
Point point3 = new Point(200, 5);
Point point4 = new Point(250, 50);
Point point5 = new Point(270, 100);
Point point6 = new Point(250, 250);
Point[] curvePoints = { point1, point2, point3, point4, point5, point6 };
g.DrawPolygon(blackPen, curvePoints);
g.FillPolygon(Brushes.Red, curvePoints);
}
base.OnPaint(e);
}