PDA

View Full Version : رسم خط مستقیم بین دو لیبل با ماوس



bahar_engineer
سه شنبه 24 آذر 1388, 22:42 عصر
سلام

من می خوام بین دو تا لیبل که توی صفحه دارم یه خط مستقیم رسم کنم البته با حرکت ماوس ، یعنی توسط کاربر

با این کد بین دو لیبل خط رسم می شه اما چون onpaint هست موقع لود صفحه خط بین دو لیبل رسم شده

چطور می تونم این کد رو تصحیح کنم که با حرکت ماوس ، خط بین دو لیبل رسم بشه ؟
می دونم که توی رویداد mousedown باید نقطه ابتدایی یعنی startpoint = new point(e.x,e.y) و توی رویداد mouseup باید نقطه انتهایی خط رو یعنی endpoint = new point(e.x,e.y)

و حتما توی mousemove هم دستورات رسم خط اما نمی دونم چرا نمی شه

اگه ممکنه راهنمایی کنید.

کد رسم خط بین دو لیبل بدون ماوس


protected override void OnPaint(PaintEventArgs e)
{
Point p1 = this.label1.Location;
p1.X += this.label1.Width / 2;
p1.Y += this.label1.Height / 2;

Point p2 = this.label2.Location;
p2.X += this.label2.Width / 2;
p2.Y += this.label2.Height / 2;

e.Graphics.DrawLine(Pens.Red, p1, p2);

base.OnPaint(e);
}


ممنون از توجهتون

Saeed.Masoumi
چهارشنبه 25 آذر 1388, 05:27 صبح
سلام
ابتدا شما این متغییر ها و تابع رسم خط را اضافه کنید:



private int ST_X, ST_Y,ED_X,ED_Y;
private bool Clicked = false;
private void DrawLine(int sx, int sy, int ex, int ey)
{
Graphics G = this.CreateGraphics();
Pen P = new Pen(Color.Red, 3);
Point p1=new Point(sx,sy);
Point p2=new Point(ex,ey);
G.DrawLine(P, p1, p2);
P.Dispose();
}

سپس دو تا لیبیل رو فرمتون قرار بدید با نامهای label1 و label2.
در رویداد Click مربوط به label1 بنویسید:



if (!Clicked)
{
Clicked = true;
ST_X = label1.Location.X;
ST_Y = label1.Location.Y;
}
else
{
ED_X = label1.Location.X;
ED_Y = label1.Location.Y;
DrawLine(ST_X, ST_Y, ED_X, ED_Y);
Clicked = false;
}

در رویداد Click مربوط به label2 بنویسید:



if (!Clicked)
{
Clicked = true;
ST_X = label2.Location.X;
ST_Y = label2.Location.Y;
}
else
{
ED_X = label2.Location.X;
ED_Y = label2.Location.Y;
DrawLine(ST_X, ST_Y, ED_X, ED_Y);
Clicked = false;
}

امیدوارم مشکلتان حل شده باشد.

hakelberfin
چهارشنبه 25 آذر 1388, 11:51 صبح
سلام
اینم یه مثال در مورد رویداد Paint و MouseMove

bahar_engineer
چهارشنبه 25 آذر 1388, 23:12 عصر
سلام
ابتدا شما این متغییر ها و تابع رسم خط را اضافه کنید:



private int ST_X, ST_Y,ED_X,ED_Y;
private bool Clicked = false;
private void DrawLine(int sx, int sy, int ex, int ey)
{
Graphics G = this.CreateGraphics();
Pen P = new Pen(Color.Red, 3);
Point p1=new Point(sx,sy);
Point p2=new Point(ex,ey);
G.DrawLine(P, p1, p2);
P.Dispose();
}

سپس دو تا لیبیل رو فرمتون قرار بدید با نامهای label1 و label2.
در رویداد Click مربوط به label1 بنویسید:



if (!Clicked)
{
Clicked = true;
ST_X = label1.Location.X;
ST_Y = label1.Location.Y;
}
else
{
ED_X = label1.Location.X;
ED_Y = label1.Location.Y;
DrawLine(ST_X, ST_Y, ED_X, ED_Y);
Clicked = false;
}

در رویداد Click مربوط به label2 بنویسید:



if (!Clicked)
{
Clicked = true;
ST_X = label2.Location.X;
ST_Y = label2.Location.Y;
}
else
{
ED_X = label2.Location.X;
ED_Y = label2.Location.Y;
DrawLine(ST_X, ST_Y, ED_X, ED_Y);
Clicked = false;
}

امیدوارم مشکلتان حل شده باشد.








سلام

با سپاس ویژه از شما دوست عزیز
باید تبریک بگم بهتون چون من الان مدتهاست توی این فروم و فروم های خارجی به عناوین مختلف این سوال رو مطرح کردم اما هیچ کس نتونست جواب درست رو به من بده

اما جواب شما کاملا درسته
من این جواب رو به عنوان بهترین جواب انتخاب می کنم!:لبخندساده:

خیلی ممنون
موفق باشید

bahar_engineer
جمعه 27 آذر 1388, 21:08 عصر
من می خوام از همین کدهای تاپیک آقای معصومی برای رسم خط بین دو تا کنترل که در زمان اجرا به فرم اضافه می شن استفاده کنم

در حالتی که کنترل ها رو در design روی فرم قرار دادم کدها به درستی عمل می کنن اما موقعی که کنترل ها رو در حالت اجرا به فرم اضافه می کنم نمی شه خط رو رسم کرد

من بین دو یوزرکنترل می خوام خط رسم کنم... نمی دونم چه قسمت هایی از کد رو توی رویداد کلیک خود یوزرکنترل بنویسم و چه قسمتی از کدها رو توی فرم ؟؟؟

کسی می تونه راهنمایی کنه ؟

طبق کدهایی که نوشتم می تونم به سادگی موقع اجرا با کلیک روی هر یوزرکنترلی که به فرم اضافه میشه یه messagebox رو نمایش بدم اما وقتی کدهای رسم خط رو می ذارم فکر می کنم توی بدست آوردن نقاط مشکل داره

saber4166
شنبه 28 آذر 1388, 16:47 عصر
سلام
اینم یه مثال در مورد رویداد Paint و MouseMove


اين كدي كه قرار دادين با يه Min و Max كردن Form از بين ميره ,
براي رفع اين مشكل بايد از Event ي به نام Paint استفاده كنيد ىر غير اين صورت اصلا كارتون درست نيست