برگزیده های پرشین تولز

مشکل با کلید میانبر

khz-web1

کاربر تازه وارد
تاریخ عضویت
20 آگوست 2007
نوشته‌ها
44
لایک‌ها
1
سلام



من با استفاده از کد زیر... کلید میانبر برای هر یک از منوهای خودم تعریف می کنم

کد:
Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

 

Select Case e.Shift

Case e.KeyCode = Keys.E

خروجToolStripMenuItem_Click(sender, e)

Case e.KeyCode = Keys.N

ثبتکاربرToolStripMenuItem_Click(sender, e)

Case e.KeyCode = Keys.ControlKey

End Select

 

End Sub

و پراپرتی keypreview فرم رو برابر با true قرار می دهم

مشکل من اینجاست که هر وقت بر روی هر یک از دکمه های کیبرد بزنم برنامه خروج می شه ... مگر اینکه ترکیب دکمه ای SHIFT+N رو بزنم که خروج نشه(منظور کلید ترکیب شده واسه میانبر هستش) ...

می خواستم بدونم مشکل از چیه ...
 

igimax

کاربر فعال کامپیوتر
تاریخ عضویت
17 سپتامبر 2004
نوشته‌ها
3,410
لایک‌ها
1,348
سن
49
سلام khz-web1 عزيز
1538.gif


. مشكل كد شما در استفاده نادرست از دستور Select Case هست. هميشه مقدار و نوع پارامتري كه جلوي Select Case مي‌آيد با شرايطي كه در جلوي Case ها مي‌آيد مقايسه مي‌شود. اگر شرط موجود در يكي از Caseها بر مقدار پارامتر Select Case صادق بود آنگاه دستورات درون بلوك آن Case اجرا مي‌شود.

. در كد شما ارامتري كه در جلوي Select Case آمده e.Shift هست، پس بايد در Caseهاي بعدي True يا False بودن آن را بسنجيد ولي شما آمده‌ايد و در جلوي Caseها يكسري شرايط جديد كه ربطي به پارمتر فوق ندارد را قرار داده‌ايد. به همين دليل شما هر كليد تنهايي را فشار دهيد، چون مقدار e.Shift = False هست پس شرطي از شروط Caseهاي در كد فوق اجرا مي‌شود كه نتيجه statement آن هم False باشد. حالا اگر هر كليدي به غير از E و N را فشار دهيد، هر 3 شرط False هست كه با False بودن e.Shift = False برابر است و اولين Case كه Exit باشد اجرا مي‌شود. اگر E را فشار دهيد، چون نتيجه Statement از Case اولي True ميشه و با e.Shift = False مخالفه پس Case دوم اجرا مي‌شود و .....

. براي تصحيح آن از يك IF براي چك فشرده شدن Shift و در درون بلوك IF از يك Select Case با پارامتر e.Keycode و در شروط Caseها كد كليد‌هاي مورد نظرتان را چك كنيد. براي نمونه از حالت Case Is = Keys.E استفاده نماييد.

. اين هم آدرس دستور Select Case در MSDN همراه برنامه تان:
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/dv_vbalr/html/68877b65-5419-4bf0-a465-20cd0e4c7d44.htm

موفق باشيد.
67562.gif


خداحافظ
IgImAx
88/01/31
209266.gif
26650.gif
 
بالا