کلیدهای ترکیبی، نقش مهمی در نرمافزارها و حتی بعضی از بازیهای کامپیوتری دارند و یکی از کاربردهای آنها، تعیین کلیدهای میانبور برای برخی از وظایف نرمافزار میباشد. برای مثال، زمانی که Ctrl+S فشار داده شد، چیزی ذحیره شود!
برای مدیریت کلیدهای ترکیبی، راههای زیادی وجود دارد که در ادامه دو روش مختلف را معرفی میکنیم.
روش اول
یکی از بهترین روشهای پیادهسازی این قابلیت، Override کردن متد ProcessCmdKey فرم (Form) میباشد:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.F)) { MessageBox.Show("WWW.FullKade.Com"); return true; } return base.ProcessCmdKey(ref msg, keyData); }
در اینجا با استفاده از یک | بیتی (اور بیتی)، تعیین کردهایم که اگر Ctrl+F فشرده شد، پیامی را در MessageBox به کاربر نمایش داده و مقدار true را از متد برگرداند؛ این مقدار به سیستم میگوید که کلید مدیریت شده و در خارج از متد، دیگر تاثیی نداشته باشد (مثلا کلید Alt+F4 باعث بسته شدن فرم میشود که اگر true برگردد، مقدار پیشفرض آن دیگر از کار میافتد). و همچنین در اینجا مشخص کردهایم اگر کلید ترکیبی Ctrl+F فشار داده نشده بود، متد اصلی فرم را از طریق base فراخوانی کند.
روش دوم
به جای استفاده از متد ProcessCmdKey، میتوان از رویداد KeyDown فرم استفاده کرد:
private void Form_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.F) { MessageBox.Show("WWW.FullKade.Com"); } }
در روش قبلی، با برگرداندن true و false مشخص کردیم که کلید مدیریت شده و دیگر پیشفرض آن اجرا نشود! اما در اینجا بایستی مقدار ویژگی Handled ورودی e را برابر true قرار دهیم که به صورت پیشفرض برابر false است.
sبا سلام و خسته نباشید
میخواستم بدونم اگر به عنوان مثال بخواهم کلید میانبر Ctrl + E + X رو تعریف کنیم چه کدی باید بنویسم.
آخه از روش بالا که انجام دادم جواب نداد.
ممنون میشوم اگه راهنمایی بفرمایید.
سلام؛ از اینجور ترکیب بندی بایستی استفاده کنین
کنترل + شیفت + حرف
آلت + کنترل + حرف
و …
یعنی دوتای اولی بایستی کلیدهای کنترل، آلت و شیفت باشه
با سلام مجدد
ولی خب اگه اینجوری هست که میفرمایید چرا توی یه نرم افزاری مثله ویژوال استودیو ، به عنوان مثال کلید ترکیبی Ctrl + K + D برای مرتب سازی کد ها وجود داره؟
منظورم این نبود که نمیشه اینکارو انجام داد؛ بلکه این اشکال روش بالا در استفاده از متد ProcessCmdKey بود
همچنین به این نکته توجه کنین که Ctrl + K + D همزمان فشار داده نمیشن! بلکه Ctrl نگه داشته میشه و سپس K و D به ترتیب فشرده و رها میشن
اگه از رویداد KeyDown فرم به جای متد ProcessCmdKey استفاده کنیم، بازم همینطوره (به انتهای مطلب اضافه شد)
درواقع کلیدهای Ctrl, Alt, Shift رو میشه به صورت فشرده شده با کلیدای دیگه بررسی کرد ولی کلیدهای دیگه رو نمیشه.
برای اینکه شما بتونین با کلیدهای دیگه هم همانند Ctrl, Alt, Shift رفتار کنین، بایستی رویدادهای KeyDown و KeyUp رو در ترکیب با همدیگه استفاده کنین
سلام خسته نباشید
اگه بخوام که کلیدهای ترکیبی زیر رو درست کنم چیکار کنم؟
F1 + 5
کلی سرچ کردم ولی چیزی پیدا نکردم
ممنون میشم کمک کنید
سلام دوست من؛ این کلیدهارو نمیشه با دو روش بالا پیادهسازی کرد. تو کامنت قبلی هم به اون یکی دوستمون گفتم!
باید با ترکیب دو رویداد KeyDown و KeyUp، این مورد رو حل کنین. (البته منطق شورتکاتها اینه که سه کلید کنترلی Ctrl و Alt و Shift با بقیه ترکیب شن نه کلیدای دیگه)
در صورتی که موفق به انجامش نشدین اطلاع بدین تا مطلبی رو در این زمینه منتشر کنم.
موفق باشین
سلام منم میخوام هر فرم کلید تابعی خودم رو تعریف کنم یا کلید 25 فرم 1 باز بشه با کلید 2a فرم 2 باز بشه به همین ترتیب اگه زحمت بکشید کدی معرفی کنید ممنون میشم
سلام هرکاری کردم نشد میشه اموزشی بزارید ممنون
سلام من میخوام در فرم اصلی وقتی دکمه های میانبر رو میزنم فرم مد نظرم باز بشه مثلا کلید عدد 25 و میزنم فرم 1 باز بشه وقتی کلید 2a میزنم فرم 2 کلید 6c میزنم فرم 3 به همین ترتیب میخوام کلید برای فرم های مدنظرم تعریف کنم با یک حرف میتونم باز کنم ولی با دو حرف نشد در ضمن از کلیدهای Ctrl , Alt ,Shift نمیخوام استفاده گنم فقط از اعداد رقمی 10 تا 99 و ترکیبشون با حروف مثل 2a , 3b 4a 8k 9m و غیره ……
سلام. ورودیها رو به ترتیب داخل یک صف قرار بدید و هربار بعد از وارد کردن یک کلید، دوتای آخر صف رو بررسی کنید. اگه زمان هم واستون مهمه پس زمان ثبت شدنشون رو هم ثبت کنید تا اگه دیرتر وارد کرد کار نکنه.
بازم سلام نمونه ایی تو vb.net یا c# دارید حرفتون بهتر متوجه بشم ممنون خیلی به این مورد نیاز دارم
درود. در صورت تمایل وارد سایت شده و تیکت بدید تا پروژه رو واستون انجام بدیم.
سلام نشد من اینو نوشتم ولی هرکار میکنم نمیشه
بازم کار نکرد
واقعا بیسوادی
نمیشه که KEYDOWN رو بجای متد processcmdkey بکار برد
متاسفم برای برنامه نویس ایرانی
ما جایی نگفتیم میشه بجای فلان متد، از متد دیگهای برای هر هدفی استفاده کرد! هدف ما اینجا ساخت کلید میانبوره و دو تا از راهحلهاشو گفتیم. استفاده از متد ProcessCmdKey یا رویداد KeyDown فرم! نگفتیم که این دو متد عین هم هستن!
وقتی ادعایی دارید بایستی بیشتر توضیح بدید نمیشه که یه حرف بیپایه و اساسی بزنیم و با یه ایمیل فیک از صحنه فرار کنیم!
پ.ن: هر شخصی چه برنامهنویس (حتی حرفهای) چه یکی دیگه، احتمال خطا از سمتش وجود داره؛ چه ما که این مطلب رو سال 94 منتشر کردیم و الآن سال 1400 هستش! بهتره وقتی خطایی هم از کسی دیدیم، با درست حرف زدن اون خطارو بهش متذکر بشیم! متاسفم برای برنامه نویس ایرانی که بلد نیست درست حرف بزنه و اینطور به یه شخصی که هدف خیری داره حملهور میشه!