PDA

View Full Version : سوال: کشیدن اشکال گرافیکی بر روی فرم که از روی کنترل های فرم بگذره



amir_pro
پنج شنبه 22 فروردین 1392, 21:38 عصر
سلام دوستان

عنوان تاپیک مشخصه. همونطور که میدونید به طور پیش فرض وقتی اشکالی مثل خط و دایره و ... روی فرم میکشید و کنترل هایی مثل label یا button یا هر چیز دیگه روی فرم باشه روی این اشکال قرار میگیره یعنی این اشکال از زیر این کنترل ها رد میشه. دنبال یه چیزی می گردم مثل BringtoFrom که این اشکال گرافیکی رو روی فرم و بر روی تمام کنترل ها بکشه. یه جوری مثل اینکه روی یه لایه که رو فرم میفته بکشه.

از تابع DrawReversibleFrame کلاس ControlPaint استفاده کردم که نمیشه چون parent رو فرم در نظر نمیگیره و صفحه مانیتور در نظر میگیره و نتونستم عوضش کنم

توی لینک زیر نمونش هست ولی من متوجه نشدم
http://www.codeproject.com/Articles/26071/Draw-Over-WinForms-Controls

خیلی جستجو کردم ولی راه حلی هنوز پیدا نکردم

Mahmoud.Afrad
پنج شنبه 22 فروردین 1392, 22:30 عصر
طریقه استفاده اش اینه که سورس را دانلود کنید و کلاس GraphicalOverlay.cs را به پروژه خودتون اضافه کنید. یکبار دیباگ کنید. سپس از تولباکس GraphicalOverlay را روی فرم drag کنید. و بعد در سازنده فرم دو خط زیر را اضافه کنید:

this.graphicalOverlay1.Paint += new EventHandler<PaintEventArgs>(graphicalOverlay1_Paint);
this.graphicalOverlay1.Owner = this;

در رویداد Paint این کمپوننت میتونید کار کشیدن اشکال مورد نظر رو انجام بدید. مثلا:

void graphicalOverlay1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(new Pen(Brushes.Blue), new Point(10, 10), new Point(400, 400));
}

amir_pro
جمعه 23 فروردین 1392, 00:23 صبح
دوست عزیز ممنون از راهنماییت. این کار رو انجام دادم ولی مشکل سورس کدش هست که متوجه نشدم چه طوری کار میده. نخواستم فقط یه استفاده کننده از سورسش باشم. میخوام کامل بفهمم که چه اتفاقی داره میفته. ممنون میشم اگه بهم بگین چه طوری کار میده

FastCode
جمعه 23 فروردین 1392, 01:09 صبح
اگر سه موضوع encapsulation,Event,Inheritance رو درک کرده باشید نباید مشکلی داشته باشید.به نظر من اول OOP بخونید.بعدش متوجه یشید.
البته این که کلمه windows از کجا اومده هم خیلی مهمه.این رو هم اگر مطالعه کنید نصف موضوع رو فهمیدید.Wnd و DC رو اگر جست و جو کنید هم توضیحات خوبی در این مورد ممکنه پیدا کنید.