2009-12-23 13 views
5

Alt text http://i49.tinypic.com/2eqcajp.jpgएक TabControl

Ctrl +PageUp/PageDown और Ctrl +टैब पर डिफ़ॉल्ट शॉर्टकट अक्षम TabControl के लिए डिफ़ॉल्ट शॉर्टकट हैं। वे आसन्न टैब के बीच में जाने में मदद करते हैं। मैं Ctrl +पृष्ठ X बाहरी टैब (tab1, tab2) और Ctrl +टैब भीतरी टैब के लिए व्यवहार (tab3, tab4) के लिए ही काम करने के लिए चाहते हैं व्यवहार जब मेरे फोकस नियंत्रण (पाठ बॉक्स में है यहाँ)। इसके लिए, मुझे डिफ़ॉल्ट व्यवहार को अक्षम करने की आवश्यकता है। क्या ऐसा करने का कोई तरीका है?

मैंने ProcessDialogKey और IsInputKey को देखा, लेकिन वे केवल एकल कीटाटा के साथ काम करते प्रतीत होते हैं। संशोधक को संभाला नहीं जाता है।

उत्तर

10

TabControl असामान्य कीबोर्ड शॉर्टकट प्रोसेसिंग है, वे OnKeyDown() विधि पर प्रतिबिंबित होते हैं। टैब टैब पर नियंत्रण के लिए कुंजीपटल हैंडलिंग को परेशान करने से बचने के लिए यह किया गया था।

आपको विधि को ओवरराइड करना होगा। अपनी परियोजना में एक नई कक्षा जोड़ें और नीचे दिखाए गए कोड पेस्ट करें। संकलित करें। टूलबॉक्स के शीर्ष से नए नियंत्रण को अपने Form पर छोड़ दें।

using System; 
using System.Windows.Forms; 

class MyTabControl : TabControl { 
    protected override void OnKeyDown(KeyEventArgs e) { 
    if (e.KeyData == (Keys.Tab | Keys.Control) || 
     e.KeyData == (Keys.PageDown | Keys.Control)) { 
     // Don't allow tabbing beyond last page 
     if (this.SelectedIndex == this.TabCount - 1) return; 
    } 
    base.OnKeyDown(e); 
    } 
} 
+0

बहुत बहुत धन्यवाद। यह पूरी तरह से काम करता है। – tsps

+3

नोट करें कि उपर्युक्त कोड सभी टैब नियंत्रण हॉटकी अक्षम नहीं करता है: आप अभी भी ** CTRL + TAB + SHIFT ** आदि का उपयोग कर सकते हैं। यदि नीचे दिए गए कथन को बदलें: 'if (ke.Control && (ke.KeyCode == Keys.Tab || के। केकोड == कुंजी। अगला || के.केकोड == कुंजी। प्रियर)) वापसी; ' –

+0

वह शॉर्टकट कुंजी टैब पीछे की तरफ। –

0

बस अपने कोड में false करने के लिए tabpageX.Enabled संपत्ति में बदलाव होने पर की आवश्यकता है। फिर का उपयोग कर Ctrl + टैबtabpageX का चयन करने में सक्षम नहीं होगा। पहली नजर में

Ctrl +टैब अपने आवेदन पर एक कहर बनाया। मैंने अपनी संपत्तियों को बचाने के लिए इसका इस्तेमाल किया।

4

लिखित रूप में, हंस पासेंट का जवाब तब तक काम नहीं करता जब तक कि आप टैब नियंत्रण के अंतिम पृष्ठ पर न हों। मुझे कुछ चाहिए जो किसी भी टैब पर शॉर्टकट की अनुमति नहीं देता है। नीचे दिए गए कोड भी Ctrl +PageUp और Ctrl +PageDown को संभालने के लिए AZ के अतिरिक्त तर्क को शामिल किया गया। उम्मीद है कि यह संस्करण समग्र तर्क को थोड़ा और स्पष्ट बनाता है:

using System.Windows.Forms; 

namespace MyNameSpace 
{ 
    internal class NoTabTabControl : TabControl 
    { 
     /// <summary> 
     /// Intercept any key combinations that would change the active tab. 
     /// </summary> 
     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      bool changeTabKeyCombination = 
       (e.Control 
        && (e.KeyCode == Keys.Tab 
         || e.KeyCode == Keys.Next 
         || e.KeyCode == Keys.Prior)); 

      if (!changeTabKeyCombination) 
      { 
       base.OnKeyDown(e); 
      } 
     } 
    } 
} 
संबंधित मुद्दे