PDA

View Full Version : اجرای تابع با خروج موس از تمام کنترلها و فرم



H:Shojaei
یک شنبه 16 فروردین 1394, 22:00 عصر
سلام...
رویدادی توی فرم یا یکی از کنترل ها هست که بشه توش نوشت وقتی موس از توی برنامه ما کلا بیرون رفت یه تابع اجرا بشه؟
مثلا وقتی کاربری نرم افزار رو باز میکنه اشاره گر رو میاره توی نرم افزار بعد به محض این که موس رو از نرم افزار خارج کرد برنامه بسته بشه یا یه کار دیگه ای انجام بشه...
رویداد های mouse leave نمیشه استفاده کنم چون لبه های فرم کنترل هست و اصلا از روی فرم خارج نمیشه از روی کنترلها هم که بخوام این رویداد رو بررسی کنم تو تک تکشون باید تابعش رو بسازم و کد مربوطه رو بنویسم! چکار کنم؟! رویدادی هست که بگیم وقتی کلا موس از برنامه خارج شد کاری انجام بشه؟

am_al_59
یک شنبه 16 فروردین 1394, 22:02 عصر
تابع رو در پیاده سازی رویداد MouseLeave فرمتون فراخوانی کنید

MouseLeave += Form1_MouseLeave;


void Form1_MouseLeave(object sender, EventArgs e)
{
کدها یا فراخوانی تابع
}

H:Shojaei
یک شنبه 16 فروردین 1394, 22:04 عصر
نوشتم mouseleave نمیتونم استفاده کنم... چون اولا کنار های فرم کنترل هست بعد هم روی هر کنترلی که بره این رویداد واسه فرم اجرا میشه و تابع اجرا میشه که نمیخوام اجرا بشه فقط وقتی از کادر نرم افزار موس خارج شد میخوام انجام بشه تابع...

am_al_59
یک شنبه 16 فروردین 1394, 22:09 عصر
تصویر شکل فرمتون رو بزارید
مگر کادر نرم افزار کادر فرمتون نیست؟ یعنی فرمتون خودش توی یک Container دیگه هست؟
کنترل ها یا در فرم هستن یا نیستن در کناره ها هستن رو متوجه نشدم

H:Shojaei
یک شنبه 16 فروردین 1394, 22:57 عصر
ببینید فکر کنید کل سطح فرم با کنترل هایی مثل باتون پوشیده شده (کنارهاش که میگم منطورم این هست) بعد چطور روی فرم رویداد mouseLeave اعمال بشه اصلا نمیشه!!! جایی هم که کنترل نداشته باشه موس بره انجا بعد بره روی یکی از این کنترل ها رویداد mouseLeave فرم اجرا میشه و بعد هم اون تابع اجرا میشه در صورتی که اصلا موس از کادر برنامه خارج نشده...
اگرم بخوام روی همه کنترل ها یا مثلا همون باتن ها رویداد mouseLeave رو اعمال کنم که هم کار زیادی میشه و پر درد سر یه راهی باشه که با یه کد ساده تشخیص داده بشه که موس از روی فرم خارج شده یعنی از کادر برنامه خارج شده باشه نه این که از روی فرم رفته باشه روی کنترل ها!
امیدوارم منظورم رو رسونده باشم...

am_al_59
یک شنبه 16 فروردین 1394, 23:03 عصر
آقا عجب کارایی میخوای بکنی ها :متعجب:

بفرمایید این کدش همونجای قبلی بزار همون کاری که میخوای میکنه

void Form1_MouseLeave(object sender, EventArgs e)
{
bool overControl = false;
foreach (Control item in Controls)
overControl |= item.RectangleToScreen(item.ClientRectangle).Conta ins(Cursor.Position);
if (!overControl)
Close();
}