2016-07-21 12 views
5

यदि टैब ऑर्डर (0) में पहला चेकबॉक्स पहला नियंत्रण है तो यह इंगित नहीं करता है कि फॉर्म प्रदर्शित होने पर यह ध्यान केंद्रित करता है। वास्तव में, यह ध्यान केंद्रित करता है जिसे आप स्पेसबार को नियंत्रण/जांचने के लिए क्लिक करके प्रदर्शित कर सकते हैं। यदि आप टैब को चेकबॉक्स पर वापस जाने के लिए टैब-टैब करते हैं, तो लेबल को फोकस इंगित करने के लिए रेखांकित किया गया है। चेकबॉक्स, टेक्स्टबॉक्स और बटन नियंत्रण के साथ एक नया फॉर्म बनाकर आसानी से परीक्षण योग्य। टैब ऑर्डर उस ऑर्डर पर सेट है। लॉन्च फॉर्म कोई संकेत नहीं होगा कि चेकबॉक्स पर ध्यान केंद्रित किया गया है। टैब हालांकि नियंत्रण और जब आप टेक्स्टबॉक्स पर वापस आते हैं, तो यह रेखांकित किया जाएगा। मैंने प्रोग्राम लोड और शेड विधियों के रूप में Control.Focus() और Control.Select() का उपयोग करके प्रोग्रामेटिक रूप से फ़ोकस सेट करने का प्रयास किया है।सी # विनफॉर्म चेकबॉक्स फोकस इंगित नहीं करता

फ़ॉर्म लॉन्च होने पर चेकबॉक्स को फोकस करने के लिए कैसे दिखता है?

उत्तर

6

यह मानक व्यवहार है। जैसा कि आपने बताया है, चूंकि नियंत्रण टैब ऑर्डर में पहला है और फोकस ले सकता है, यह वास्तव में फ़ॉर्म प्रदर्शित होने पर वास्तव में केंद्रित है।

समस्या यह है कि, since Windows 2000, the focus rectangles and underlined mnemonics have been hidden by default। जब तक आप कीबोर्ड इंटरफ़ेस का उपयोग करके प्रोग्राम के साथ बातचीत शुरू नहीं करते हैं तब तक वे दिखाई नहीं देते हैं। बस दबाकर Alt कुंजी उन्हें प्रकट करने के लिए पर्याप्त है। तो वास्तव में टैब और शिफ्ट + टैब का उपयोग कर रहा है।

विचार विंडोज़ में दृश्य शोर को कम करना है, अर्थात् फोकस संकेतक और मेन्यू और विंडोज़ में कुंजी की रेखांकित करना। सौंदर्यशास्त्र, ये चीजें विचलित और डरावनी हैं। कार्यात्मक रूप से, जब आप कीबोर्ड द्वारा नेविगेट कर रहे होते हैं तो वे केवल उपयोगी होते हैं। जब आप माउस का उपयोग कर रहे हों तो वे महत्वपूर्ण मूल्य नहीं जोड़ते हैं। वास्तव में, वे अक्सर अनावश्यक होते हैं।

अब क्यों? हर अच्छी चीज कहीं शुरू होनी चाहिए। विंडोज क्लीनर और सरल दिखेंगे।

[है & hellip;]

बेशक

, कीबोर्ड संकेतक वापस आ जाएगा, वहाँ उपयोगकर्ता द्वारा कीबोर्ड नेविगेशन के किसी भी प्रदर्शन है। संकेतक प्रकट होंगे और उचित रूप से गायब हो जाएंगे। अंत में, अगर आपको व्यवहार पसंद नहीं है, तो आप इसे डिस्प्ले कंट्रोल पैनल से अक्षम कर सकते हैं।

तो आप कुछ भी गलत नहीं कर रहे हैं। Select या Focus या समकक्ष का कोई प्रोग्रामेटिक उपयोग उस फोकस आयताकार को दिखाने के लिए नहीं जा रहा है। नियंत्रण पहले से ही केंद्रित है। ताकि फोकस संकेतक हमेशा से पता चला रहे हैं

  1. बदलें सिस्टम सेटिंग:

    वहाँ केवल दो चीजें आप संभवतः कर सकता है कर रहे हैं। चूंकि यह एक वैश्विक सेटिंग है, इसलिए इसे केवल अंतिम उपयोगकर्ता द्वारा छेड़छाड़ की जानी चाहिए, न कि आपके आवेदन से। इसलिए, ऐसा करने के लिए एपीआई फ़ंक्शन को कॉल करने की आवश्यकता नहीं है, बस नियंत्रण कक्ष पर जाएं।

  2. नियंत्रण के ड्राइंग व्यवहार को ओवरराइड करें और इसे ध्यान केंद्रित करने के लिए मजबूर करें, चाहे सिस्टम को क्या करना चाहिए, इस पर ध्यान दिए बिना।आप पूरी तरह से मालिक-ड्राइंग नियंत्रण कर ऐसा कर सकता है, लेकिन यह सिर्फ बजाय इस पर नियंत्रण वर्ग का उपयोग करने के शायद आसान है:

    public class ForcedFocusCheckBox : CheckBox 
    { 
        protected override bool ShowFocusCues 
        { 
         get { return true; } 
        } 
    } 
    

लेकिन ईमानदारी से, आप इन बातों में से किसी न किए जाएं। यह एक मानक मंच सम्मेलन है। सभी अंतर्निहित संवादों के लिए भी यही बात होती है। यदि कोई उपयोगकर्ता पहले से ही इसे नहीं जानता है, तो वह शायद अधिक कीबोर्ड इंटरैक्शन नहीं करता है, और वे पहले स्थान पर अपने चेकबॉक्स को टॉगल करने के लिए स्पेसबार दबाए जाने की अपेक्षा नहीं करेंगे। वे सिर्फ माउस का उपयोग करेंगे।

+0

महान उत्तर और स्पष्टीकरण! मैं यूनिक्स कोबोल से एक आवेदन भेज रहा हूं और शिकायतें हैं कि उपयोगकर्ता नहीं जानता कि कौन सा नियंत्रण सक्रिय है और वे माउस के लिए पहुंचने के लिए बहुत अनिच्छुक हैं क्योंकि यह उन्हें धीमा कर देता है। वे बस चेकबॉक्स का चयन करने के लिए स्पेसबार का उपयोग करने के विचार को गर्म कर रहे हैं और वाई/एन प्रतिक्रियाओं को वापस नहीं पूछ रहे हैं ... –

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