2011-05-12 17 views
8

मेरे पास TabControl है जिसमें कई टैब हैं। प्रत्येक टैब पर एक UserControl है। मैं UserControlUserControlB से x पर नियंत्रण की दृश्यता देखना चाहता हूं। मुझे लगा कि UserControlB से काफी अच्छा होगा। जैसा कि यह पता चला है, यह डीबगर में false प्रदर्शित कर रहा था, भले ही मैंने इसे स्पष्ट रूप से true पर सेट किया और यह कभी नहीं बदला गया। तब मैं Control.Visible के लिए MSDN पर पढ़ा है कि:मैं नियंत्रण की दृश्यता कैसे निर्धारित करूं?

भी दिखाई दे सही पर सेट किया जाता है, नियंत्रण नहीं दिखाई उपयोगकर्ता के लिए अगर यह अन्य नियंत्रण के पीछे छिप जाता है हो सकता है।

मेरे आश्चर्य के लिए बहुत कुछ, यह काम नहीं करेगा। अब मैं सोच रहा हूं कि मैं कैसे बता सकता हूं कि नियंत्रण x एक अलग UserControl से दिखाई दे रहा है या नहीं। यदि संभव हो तो मैं एक बूलियन का उपयोग करना टालना चाहूंगा। क्या किसी ने इसमें भाग लिया है और समाधान मिला है?

नोट: यह भी प्रतीत होता है कि Control.IsAccessible इस स्थिति में गलत है।

+0

आप की कोशिश की कंटेनर पदानुक्रम में आरोही और दृश्यमान नहीं दिख रहा है अगर उनमें से कोई भी दिखाई नहीं दे रहा है? –

+0

हां, सभी माता-पिता सभी तरह से 'दृश्यमान' संपत्ति को 'झूठी' पर सेट करते हैं। – SwDevMan81

+0

तो आप दिखाई नहीं दे रहे हैं, क्या मैं सही हूँ? –

उत्तर

7

दुर्भाग्यवश नियंत्रण कुछ भी सार्वजनिक नहीं प्रदान करता है जो आपको यह जांचने की अनुमति देगा।

एक संभावना नियंत्रण 'टैग' संपत्ति में कुछ सेट करना होगा। टैग का उद्देश्य उपयोगकर्ता डेटा को नियंत्रण से जोड़ना है। तो यह सिर्फ एक बुलियन नहीं हो सकता है।

Here is the Tag property doc

तुम सच में जानवर बल रास्ता देखना चाहते हैं, तो आप प्रतिबिंब का उपयोग कर सकते बुनियादी तौर पर बुला GetState (2):

public static bool WouldBeVisible(Control ctl) 
{ 
     // Returns true if the control would be visible if container is visible 
     MethodInfo mi = ctl.GetType().GetMethod("GetState", BindingFlags.Instance | BindingFlags.NonPublic); 
     if (mi == null) return ctl.Visible; 
     return (bool)(mi.Invoke(ctl, new object[] { 2 })); 
} 
+0

+1 अच्छा खोज। ऐसा लगता है कि नोबगज़ (उर्फ हंस पासेंट) ने यहां कुछ ऐसा पोस्ट किया है: http://social.msdn.microsoft.com/Forums/en/winforms/thread/e2e681ef-94d2-4eb3-b9a4-4e20a49afae0। जवाब के लिए धन्यवाद! – SwDevMan81

0

कृपया इस प्रयास करें:

bool ControlIsReallyVisible(Control C) 
{ 
    if (C.Parent == null) return C.Visible; 
    else return (C.Visible && ControlIsReallyVisible(C.Parent)); 
} 
+0

यह हमेशा सच होगा – SwDevMan81

+0

हाँ - यहां सुधार –

+0

यह समाधान मेरे लिए काम नहीं करता है। हमेशा सच आता है। –

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