PDA

View Full Version : مشکل با رسم اشکال روی فرم



shahram_c1
پنج شنبه 04 خرداد 1391, 23:51 عصر
سلام دوستان؛
کد زیر مربوط میشه به رسم یه چند ضلعی روی فرم ...

سوال :
می دونید که این چند ضلعی ها از ترکیب چندین Point که دارای X , Y هستش ، تشکیل و رسم می شن.
حالا من این Point ها رو ( یعنی X , Y هاش رو ) از یه فایل می خونم و در آرایه ای ذخیره می کنم...
حال، واسه رسم این Point ها فقط از رویداد Paint از فرم این امکان میسر هستش یا راهکار دیگه ای هم هست؟
اگر راه دیگه ای نیست ، این Point ها رو به رویداد Paint از فرم چطور میشه پاس داد ؟

یعنی به عبارتی Point ها رو در یه تابعی می گیرم، حالا می خوام ازشون استفاده کنم و مثلاً یه چند ضلعی رو تو Form1_Paint رسم کنم.

private void Form1_Paint(object sender, PaintEventArgs e)
{

Graphics g = e.Graphics;

// Create pen.
Pen blackPen = new Pen(Color.Black, 3);

// Create points that define polygon.

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};

// Draw polygon to screen.
g.DrawPolygon(blackPen, curvePoints);

// Fill polygon
g.FillPolygon(Brushes.Red, curvePoints);

}


مرسی از راهنمایی دوستان ، شهرام :لبخندساده::چشمک:

shahram_c1
چهارشنبه 10 خرداد 1391, 00:07 صبح
کسی از دوستان پاسخی نداره؟!!

mahdi87_gh
چهارشنبه 10 خرداد 1391, 10:02 صبح
هدفتون رو بیشتر توضیح بدین.
شاید راه حل بهتری هم وجود داشته باشه. دقیقا مشکل کارتون چیه؟

Mahmoud.Afrad
چهارشنبه 10 خرداد 1391, 19:51 عصر
یک متد به این صورت میتونید تعریف کنید برای رسم چندضلعی روی هر کنترلی:
private static void createPolygon(Point[] points , Control c)
{
if (points.Length >= 2)
{
c.Refresh();

Graphics g = c.CreateGraphics();
// Create pen.
Pen pen = new Pen(Color.Black, 3);
// Draw polygon on control.
g.DrawPolygon(pen, points);
// Fill polygon
g.FillPolygon(Brushes.Red, points);

g.Dispose();
pen.Dispose();
}
else
{
MessageBox.Show("The number of points must be more than one");
}
}هر جا خواستید باید آرایه ای از point و نام کنترل رو بهش پاس بدید. به این صورت مثلا
createPolygon(curvePoints, panel1);

shahram_c1
جمعه 12 خرداد 1391, 11:32 صبح
ضمن تشکر از پاسخ شما ؛

متدی که شما تعریف کردید، به جای ورودی مثلا کنترل panel1 ، در نظر دارم ورودی ش کنترل فرمم باشه. یعنی چند ضلعی روی فرم رسم شه ..
با خطای form1 is 'type' , but it used like a 'variable' مواجه میشه !

لطفا راهکاری ارائه بدین

مرسی از راهنماییتون

veniz2008
جمعه 12 خرداد 1391, 11:57 صبح
سلام، چیزی که من متوجه شدم شما میخواید روی خود فرم شکل بکشید نه اینکه مثلا یه پنل بذارید و روی اون پنل شکل بکشید،اگه درست متوجه شده باشم شما باید بصورت زیر استفاده کنید:
اگه میخواید زمانیکه برنامه رو اجرا می کنید شکل هم نمایش داده بشه شما باید رویداد paint فرمتون رو استفاده کنید،بصورت زیر:

private void Form3_Paint(object sender, PaintEventArgs e)
{
g.DrawLine(Pens.Blue, 20, 20, 100, 100);
}
همچنین شما بایستی داخل formload کد زیر رو قرار بدید:

private void Form3_Load(object sender, EventArgs e)
{
g = this.CreateGraphics();
}
متغیر گرافیکی g رو هم باید بصورت سراسری تعریف کنید.
موفق باشی دوست من.

Mahmoud.Afrad
جمعه 12 خرداد 1391, 17:09 عصر
ضمن تشکر از پاسخ شما ؛

متدی که شما تعریف کردید، به جای ورودی مثلا کنترل panel1 ، در نظر دارم ورودی ش کنترل فرمم باشه. یعنی چند ضلعی روی فرم رسم شه ..
با خطای form1 is 'type' , but it used like a 'variable' مواجه میشه !

لطفا راهکاری ارائه بدین

مرسی از راهنماییتون
معلومه form1 نوع هست باید شئ ای که از فرم 1 ساخته شده رو بفرستید. برای فرم جاری از this استفاده کیند
createPolygon(curvePoints, this);