PDA

View Full Version : نمایش MessageBox در صورت برخورد دو شی با همدیگر



alasht
یک شنبه 11 دی 1390, 10:02 صبح
با سلام خدمت دوستان
من یه برنامه چند خطی نوشتم که میشه یوزر کنترلهایی رو که ساختم رو تو فرم در حال اجرا جرکت بدم
حالا میخوام کاری کنم که وقتی این یوزر کنترلها به همدیگه خوردند یه MessageBox نشون بده
به عکس زیر توجه کنید
من به عنوان مثال دارم مربع قرمز رو با موس حرکت میدم با سرعت زیاد حالا چه کدی بنویسم که
مربع قرمز اگه کوچکترین برخوردی با مربع سبز داشت اسم (Name)مربع قرمز رو تو MessageBox نشون بده ؟

http://up2.iranblog.com/images/5ybbsran4t8ifhtdxijo.jpg

mehdi.mousavi
یک شنبه 11 دی 1390, 12:59 عصر
سلام.
با فرض اینکه کنترل اول شما اسمش c1 باشه و کنترل دوم c2، می تونیم بدین شکل عمل کنیم:


Rectangle rc1 = c1.RectangleToScreen(c1.ClientRectangle);
Rectangle rc2 = c2.RectangleToScreen(c2.ClientRectangle);
if (rc1.IntersectsWith(rc2))
{
//Those controls are intersected...
}

موفق باشید.

alasht
یک شنبه 11 دی 1390, 15:09 عصر
با تشکر از شما
دقیقا همون چیزیه که میخواستم
فقط اگه میشه در مورد توابعی که به کار بردین یه توضیح بدید
تا حالا با این توابع کار نکرده بودم
RectangleToScreen و IntersectsWith
و همچنین خاصیت ClientRectangle
با تشکر

M.YasPro
یک شنبه 11 دی 1390, 15:59 عصر
در تکمیل پاسخ استاد موسوی :
RectangleToScreen (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.rectangletoscreen.asp x)بر اساس Location و size یک کنترل ، یه محدوده از کنترل Container مربوط به کنترل مورد نظر رو معرفی می کنه .
IntersectsWith (http://msdn.microsoft.com/en-us/library/system.drawing.rectangle.intersectswith.aspx): مشخص می کنه که با یک rectangle دیگه تلاقی داره یا نه
ClientRectangle (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.clientrectangle.aspx) هم یک محدوده مستطیلی رو که کنترل ما در روی کنترل container اشغال می کنه رو معرفی می کنه

موفق باشید ./

alasht
یک شنبه 11 دی 1390, 16:21 عصر
با تشکر از شما دوست عزیز
به مشکل دیگه برام به وجود اومد
فرض کنید چند تا شی قرمز داریم که به شی سبز وصله
اونوقت چطوری میشه تمامی این شی ها اسمشون رو تو یه ارائه ریخت و تو خروجی نمایش داد
من کد زیر رو نوشتم اما خروجیش میشه این

{X=388,Y=198,Width=57,Height=42}
{X=313,Y=186,Width=57,Height=42}

کدم هم اینه

Rectangle[] Rect = new Rectangle[100];

Rect[0] = Red1.RectangleToScreen(Red1.ClientRectangle);

Rect[1] = Red2.RectangleToScreen(Red2.ClientRectangle);

Rect[2] = Red3.RectangleToScreen(Red3.ClientRectangle);

Rectangle Green = Green.RectangleToScreen(Green.ClientRectangle);

for (int i = 0; i <= 3; i++)
{

if (Green.IntersectsWith(Rect[i]))
{

textBox1.Text += Rect[i] + "\n";

}
}

alasht
دوشنبه 12 دی 1390, 12:24 عصر
دوستان کسی نظری نداره ؟

M.YasPro
دوشنبه 12 دی 1390, 13:16 عصر
سوالتون رو متوجه نشدم که نظری داشته باشم ./

alasht
دوشنبه 12 دی 1390, 14:27 عصر
منظورم اینه اگه مثلا 3 تا شی قرمز به یک شی سبز چسبیده باشه چطور میتونم نام اشیا قرمزی که به سبز چسبیدن رو تو یه آرایه بریزم
فرض کنید یه یوزر کنترل ساختم و از اون یوزر کنترل 4 تا تو فرمم گذاشتم و یکی به رنگ سبز و 3 تا به رنگ قرمز
مانند عکس پست اولم
شی سبز رو اسمش(Name) رو میزارم Green
و شی های قرمز رو میزارم Red1,Red2,Red3
و همونطور که تو عکس مشخصه قرمزها رو به سبز اتصال دادم
حالا میخوام وقتی رو Show Names کلیک میکنم نام قرمزها رو تو تکس باکس نشون بده
به طوری که اگه 100 تا شی قرمز هم به سبز وصل بود اسم همه رو نشون بده و محدودیتی نداشته باشه
امیدوارم منظورم رو متوجه شده باشید
http://up6.iranblog.com/images/cbcjkwlxx74sqgsz1g.gif

M.YasPro
دوشنبه 12 دی 1390, 14:45 عصر
به طوری که اگه 100 تا شی قرمز هم به سبز وصل بود اسم همه رو نشون بده و محدودیتی نداشته باشه
فکر می کنم این کار امکان پذیر نباشه ، اما میشه تمام اشیاء موجود در فرم رو پیمایش کنید و بعد با متدIntersectsWith چک کنید ببیند که با هم تلاقی دارند یا نه .
اگر راهی پیدا نکردید پروژه رو آپلود کنید تا بشه بهتر اظهار نظر کرد ./

alasht
دوشنبه 12 دی 1390, 14:55 عصر
نه 100 تا شی که مثال بود
نهایتش 4 -5 تا رو هم ساپورت کنه بسه
اگه پروژه آماده دارید ممنون میشم قرار بدید
با تشکر

M.YasPro
دوشنبه 12 دی 1390, 15:38 عصر
یه نمونه آماده کردم