2013-08-14 10 views
6

मेरे पास Menustrip है Form पर आइटम, और जब मैं इसे दबाता हूं तो यह Form बंद करता है। मैं अपने MenuStrip आइटम "ईएससी" के लिए शॉर्टकट कुंजी बनाना चाहता हूं, लेकिन "शोरकटकी" सेटिंग्स में, इसमें ईएससी के लिए कोई विकल्प नहीं है, क्या कोई तरीका है कि मैं इसे "ईएससी" कर सकता हूं? मुझे इसे MenuStrip आइटम पर दिखाना है कि "ईएससी" शॉर्टकट कुंजी है।क्या आप एक ईएससी कुंजी शॉर्टकट जोड़ सकते हैं?

ऐसा काम नहीं करता:

menuStripItem.ShortcutKeys = Keys.Escape; 
+2

स्थिति क्या है? आप 'रद्द करें बटन' से बेहतर हो सकते हैं। – Ryan

उत्तर

6

मुझे नहीं लगता कि इस के लिए एक सीधा समाधान है, आप इस समाधान का ShortcutKeyDisplayString कोड

menuStripItem.ShortcutKeyDisplayString = "ESC"; 

में भीतर का उपयोग कर सकते हैं, सेट करें KeyDown फॉर्म की घटना की जांच करें यदि ESC दबाया गया है और Close() फ़ॉर्म है।

+0

मेरे पास एक कोड है जो इसे बनाता है ताकि मैं प्रोग्राम को बंद करने के लिए ईएससी कुंजी दबा सकूं। मैं जो करना चाहता हूं वह इसे बनाता है ताकि यह शॉर्टकट कुंजी क्षेत्र में दिखाया जा सके कि शॉर्टकट कुंजी ईएससी – Dozer789

+0

हालांकि कोशिश करने के लिए धन्यवाद। – Dozer789

+1

फिर जब मैंने अपने कोड में दिखाया है तो आप 'शॉर्टकटकीडिस्प्लेस्ट्रिंग' प्रॉपर्टी को 'एस्केप' के रूप में सेट कर सकते हैं। यदि आपको बस शॉर्टकट कुंजी के रूप में ईएससी दिखाने की आवश्यकता है। – Kurubaran

8

Winforms आपके द्वारा चुने गए शॉर्टकट कीस्ट्रोक के बारे में picky है। नियम यह है कि यह एक फंक्शन कुंजी (एफ 1-एफ 12) या Keys.Control या Keys.Alt के साथ एक और कुंजी होना चाहिए। यहां बड़ा इरादा यह है कि आप एक सामान्य कुंजी को गलती से प्रतिस्थापित नहीं कर सकते हैं जिसका उपयोग TextBox में किया जा सकता है। एस्केप कुंजी आमतौर पर एक संवाद के रद्द बटन को संचालित करती है।

Keys.Escape बल्कि विशेष है; Alt + Escape और Ctrl + एस्केप काम नहीं कर सकता, क्योंकि वे विंडोज़ में ग्लोबल शॉर्टकट कुंजी हैं।

तो आप ShortcutKeys संपत्ति का उपयोग नहीं कर सकते हैं; आपको एस्केप कुंजी को अलग-अलग पहचानना होगा। ProcessCmdKey() विधि को ओवरराइड करके आसानी से आपके फॉर्म क्लास में किया गया। इस कोड को अपने फॉर्म में पेस्ट करें:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == Keys.Escape) { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

यह इसे बंद करने के लिए काम करेगा, लेकिन मेरे पास पहले से ही कोड है। मुझे इसकी आवश्यकता थी कि इसे शॉर्टकट कुंजी दिखाएं। – Dozer789

+1

@ Dozer789 यहां तक ​​कि जब आपके पास इसे बंद करने के लिए कोड है, तो यह कोड बेहतर है क्योंकि आप डिफ़ॉल्ट कमांड-कुंजी प्रक्रिया को रोक सकते हैं, 'ईएससी' एक विशेष कमांड-कुंजी है जो किसी मामले में अप्रत्याशित रूप से काम कर सकती है। तो बस डिफ़ॉल्ट कार्रवाई को अक्षम/ओवरराइड करना बेहतर होगा। –

+0

मैं अपने प्रोग्राम के लिए इस कोड का उपयोग कर रहा हूं, मुझे याद नहीं है। अगर मैं नहीं हूं, तो शायद मैं इस कोड का उपयोग करने जा रहा हूं। – Dozer789

संबंधित मुद्दे