2009-04-24 14 views
11

क्या उपयोगकर्ता नियंत्रण को अस्वीकार करने का कोई तरीका है?क्या UserControl को ध्यान में रखने का कोई तरीका है?

संपादित करें: तो SetStyle(ControlStyles.Selectable, false)

जाने का रास्ता है। लेकिन अभी भी Control में अंतर है। यदि आप Control फॉर्म प्राप्त करते हैं तो प्रारंभिक नियंत्रण फोकस नहीं खोता है। लेकिन अपने नियंत्रण UserControl और

ControlStyles.Selectable 

से ली गई है उस पर क्लिक करने के बाद लागू किया जाता है फोकस प्रारंभिक नियंत्रण से हटा दिया है।

उत्तर

12

अपने निर्माता में InitializeComponent() के बाद आप SetStyle फोन और ControlStyles.Selectable शैली false को निर्धारित करने की आवश्यकता:

SetStyle(ControlStyles.Selectable, false); 
+1

यह तब काम नहीं करता है जब UserControl ने टेक्स्टबॉक्स को एम्बेड किया हो। टेक्स्ट बॉक्स फोकस कैप्चर करेगा। – volody

+1

@ वोलोडी: हां, बाल नियंत्रण फोकस पर कब्जा कर सकता है, लेकिन 'UserControl' नहीं कर सकता है। –

0

सक्षम = झूठा, शायद?

+0

फोकस अक्षम किया गया है ...लेकिन पृष्ठभूमि छवियों के विभिन्न व्यवहार जैसे दुष्प्रभाव हैं ... तो अच्छा प्रयास करें .. :) – Matze

1

उपयोगकर्ता नियंत्रण, या कोई नियंत्रण, यदि CanFocus संपत्ति झूठी रिटर्न देता है तो फोकस प्राप्त नहीं कर पाएगा। यदि आप परावर्तक में कोड देखते हैं तो यह मूल रूप से 3 गुणों की जांच करता है और यदि कोई झूठा है तो यह गैर-केंद्रित होगा।

  • IsHandleCreated
  • IsVisible
  • IsEnabled

झूठे और पहले दो सेट करना एक कार्य नियंत्रण रखने काफी एक विरोधाभास है। यदि यह संभव है कि आपके नियंत्रण के लिए IsEnabled के साथ कार्यात्मक होना गलत है तो उसे काम करना चाहिए।

+3

केवल नियंत्रण स्टाइल सेट करने के लिए बहुत आसान है। चयन करने योग्य शैली को गलत। –

2

हाँ, SetStyle (ControlStyles.Selectable, झूठी); केवल तभी काम करता है जब आप नियंत्रण से विरासत में हों।

यदि आप उपयोगकर्ता नियंत्रण से विरासत में हैं, तो यह काम नहीं करेगा।

समस्या को हल करने के लिए, मैंने उपयोगकर्ता नियंत्रण में एक पैनल जोड़ा और पैनल को "भरें" पर डॉक किया। उपयोगकर्ता नियंत्रण के बजाय पैनल में शेष नियंत्रण जोड़ा गया। इसने काम कर दिया!

0

आप TabStop को गलत पर सेट करके अपनी इच्छित चीज़ों के करीब पहुंच सकते हैं। इससे नियंत्रण को ध्यान में रखने से रोका जा सकता है, उदाहरण के लिए, अपने स्वयं के फॉर्म के ऊपर एक संवाद-बॉक्स बंद हो जाता है।

4

ControlStyles.Selectable इसके अलावा वहाँ भी एक ControlStyles.ContainerControl है - प्रलेखन बल्कि इस विषय पर विरल है (अगर सही है तो नियंत्रण एक कंटेनर की तरह नियंत्रण है), लेकिन अगर बच्चे नियंत्रण नियंत्रण के बजाय ध्यान केंद्रित प्राप्त यह किसी भी तरह प्रभावित करता है अपने आप।

संपादित करें:

मैं सिर्फ एक और दिलचस्प तथ्य पर ध्यान दिया है। परावर्तक में UserControl को देखते हुए यह दिखाता है कि यह ऑनमोउसडाउन में इनपुट फ़ोकस सेट करने में मजबूर करता है। तो बेस कॉल किए बिना ऑनमाउसडाउन ओवरराइड करना। ओनमाउसडाउन (ई) किसी भी दुष्प्रभाव के साथ समस्या का समाधान करता है।

[EditorBrowsable(EditorBrowsableState.Advanced)] 
protected override void OnMouseDown(MouseEventArgs e) 
{ 
    if (!this.FocusInside()) 
    { 
     this.FocusInternal(); 
    } 
    base.OnMouseDown(e); 
} 
संबंधित मुद्दे

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