PDA

View Full Version : کنترل کلید Esc و Alt+F4 درتمام قسمتهای برنامه



once4ever
سه شنبه 22 فروردین 1385, 16:46 عصر
سلام دوستان. میخوام داخل برنامه ام درهرحالتی و داخل هر فرمی به محض اینکه کاربر کلید Esc رو زد تابع مربوط به خروج من اجرا بشه. چجوری انجام بدم؟
و اگه برای Alt+f4 هم همین کنترل بشه ساخت خیلی عالی میشه(البت در این مورد تو همین فروم دیدم ولی نمیدونم کجا بود. پیداش میکنم)
ممنون از کمکتون

ali_kolahdoozan
سه شنبه 22 فروردین 1385, 17:47 عصر
خب از رویداد keydown استفاده کنید . اما این کار منطقی نیست مثلا کاربر توی یک فرم است حالا esc می زنه خوب این یعنی از این فرم بیا بیرون نه اینکه از کل برنامه . اما alt+f4 از رویدادهای closing و کنسل کردن خروج می تونی استفاده کنی حالا تصمیم بگیر هنوز می خواهی کامل برنامه فرم خروج رو نشون بده با esc یا نه . جوابش رو بده تا کمکت کنیم

once4ever
سه شنبه 22 فروردین 1385, 17:59 عصر
من تو تابع خروجم تمام اینهارو کنترل میکنم
درضمن از keydown هم استفاده کردم ولی جواب نمیده
(خیلی جالبه که اولین کلیدی که میزنی تابع عمل میکنه ولی دیگه عمل نمیکنه! )
ممنون میشم کمک کنی

ali_kolahdoozan
سه شنبه 22 فروردین 1385, 18:02 عصر
ببین alt+f4 فقط برای فرم اصلی بکار می ره اگه بخوای همه همینطور بشه خیلی زایه بازی میشه . اما باید موقع بسته شدن هر فرم تابعت رو صدا بزنی توی form closing اما ناجور می شه من این رو فقط براس فرم پدر اول گذاشتم

once4ever
سه شنبه 22 فروردین 1385, 18:05 عصر
مرسی ازراهنماییت
اما میشه به من بگی چجوری میتونم کاری کنم که ازهرجا کاربر Esc رو زد تابعی از mainForm من اجرا بشه(مثلا MainExit )
ممنون

ali_kolahdoozan
سه شنبه 22 فروردین 1385, 18:07 عصر
ببین application.exit کلا از برنامه میاردت بیرون اما می تونی قبلش جلو این کار رو بگیری و کنسلش کنی این کار رو می تونی با نشون دادن یک فرم و آقا می خواهی بیایی بیرون و ... مدیریت کنی

once4ever
سه شنبه 22 فروردین 1385, 18:15 عصر
علی جان عزیز دلم من با چجوری خارج شدن مشکلی ندارم
مشکل من اینه که
1. چجوری بفهمم کاربر کلید Exc رو زده (داخل یک برنامه MDI
2. اگه مرحله 1 رو فهمیدم حالا چک میکنم که همه جا میتونه این کلید رو چک کنه یا نه

ali_kolahdoozan
سه شنبه 22 فروردین 1385, 19:05 عصر
خوب ببین alt+f4 سبب میشه برنامه هر جا که هست فرمها رو ببنده بیاد بیرون خوب شما اینجا کد بنویس . من در مورد alt+f4 حرف می زنم نه esc

once4ever
سه شنبه 22 فروردین 1385, 19:26 عصر
ممنون
آقا درمورد Esc کسی نظری نداره؟!

shahab_ss
جمعه 25 فروردین 1385, 21:26 عصر
َALLWAYS KEEP IT SIMPLE, AS SIMPLE AS POSSIBLE...BUT NOT MORE THAN THAT

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
CloseReason cr_m = e.CloseReason;

if (cr_m == CloseReason.UserClosing)
{
// ask if the fucking user really wants to close
// then EXIT

}
else
e.Cancel = true;

}

once4ever
جمعه 25 فروردین 1385, 22:53 عصر
دوست عزیز من
شهاب جان اگه یکم به سوال دقت میکردی میفهمیدی که سوال من اینی نبود که شما گفتی ;)
ممنون که وقت گذاشتی ولی دقت کن;)
نکته: ازاین به بعد کدهاتو داخل تگ code قراربده که قابل خوندن و قشنگترباشه

shahab_ss
شنبه 26 فروردین 1385, 09:41 صبح
امیدوارم این مثال بهت کمک کنه.
توی فرم اصلی همونطور که خودت هم میدونی KeyDown Event یک بار بیشتر اجرا نمیشه.
(This might be a BUG ) برای همین من یه کلک کوچولو برای به تله انداختن کلید Esc زدم. یه کلید گذاشتم که کارش خروج از برنامس.و CancelButton رو در فرم اصلی ( فقط همین فرم ) برابر با این کلید قرار دادم.
این مشکل تو فرمهای دیگه وجود نداره.
نکته : شما برای اینکه مجبور نباشی این کلید بی مصرف رو ببینی میتونی سایز اون رو به 0.0 تغییر بدی
( چون اگه Visible = false اونوقت دسترسی به اون رو از دست میدی ).

اگه راه بهتری پیدا کردی لطفا به من هم بگو.
از نکاتی هم که بهم گفتی ممنون . با عجله اون تاپیک رو نوشتم برای همین ...

موفق باشی

once4ever
شنبه 26 فروردین 1385, 10:07 صبح
پس راحشو بهت میگم که هم حال کنی و هم حال کنی :چشمک:
البته یک اشتباه کوچیک ما کردیم و اون اینکه خصوصیت KeyPreview فرم اصلی رو اگه بربر true بکنیم دیگه همه جا (اکثر جاها) کلیدمونو کنترل میکنه

amir_pro
جمعه 16 آذر 1386, 22:05 عصر
یه منو بساز و مخفیش کن و یک shortcut براش تعریف کن و توی رویداد این زیر منو کدی را بنویس که اگه Esc زده شد چه کاری انجام بده