2009-07-13 13 views
9

जब एक .NET विंडोज़ फॉर्म पर नियंत्रण में हेरफेर करना निम्न में से कौन सा सर्वोत्तम अभ्यास है और क्यों?क्या नियंत्रण को अक्षम और छुपाया जाना चाहिए या सिर्फ छुपाया जाना चाहिए?

//Hide control from user and stop control form being useable 
oControl.Enabled = false; 
oControl.Visible = false; 

या

//Hide control from user and stop control form being useable 
oControl.Visible = false; 

मैं पहले मामले का उपयोग कर दिया गया है और जब यह छिपा हमेशा एक नियंत्रण को अक्षम करने के लिए, लेकिन मुझे बताया गया है कि इस गलत है और मैं केवल होना चाहिए इसे छुपा मुझे लगता है कि कहीं कहीं पढ़ना याद नहीं है कि अगर आप विशेष रूप से नियंत्रण को अक्षम नहीं करते हैं तो यह उपयोगकर्ता के साथ बातचीत जारी रख सकता है।

किसी भी ज्ञान की सराहना की जाएगी।

उत्तर

11

Enabled उपयोगकर्ता नियंत्रण के साथ बातचीत कर सकते हैं या नहीं, को संदर्भित करता है (यानी अगर नियंत्रण धूसर हो या नहीं है)

Visible wehether करने के लिए या नियंत्रण प्रदर्शित किया जाता है नहीं (आमतौर पर अगर यह गलत है नियंत्रण संदर्भित करता है बिल्कुल प्रस्तुत नहीं किया गया है, हालांकि हर समय स्पष्ट रूप से नहीं - इस पोस्ट की टिप्पणियां देखें)।

यदि नियंत्रण प्रदान नहीं किया जाता है तो सक्षम प्रोपरी के मूल्य का कोई प्रभाव नहीं पड़ेगा।

+4

यह हमेशा मामला नहीं है; ChrisF के उत्तर के तहत ToolStripMenuItem पर मेरी टिप्पणी देखें। –

8

MSDN से:

तत्वों जहां दृश्यता नहीं है दर्शनीय घटनाओं (या आदेशों) इनपुट में भाग नहीं लेते, या तो उपाय को प्रभावित करने या लेआउट के गुजरता की व्यवस्था नहीं है, में नहीं हैं एक टैब अनुक्रम, और हिट परीक्षण में रिपोर्ट नहीं की जाएगी।

तो मुझे लगता है कि आप यह मान सकते हैं कि .Enabled = false सेटिंग अनावश्यक है।

अद्यतन

मैं .Visibitydocumentation on the MSDN देख लिया है, लेकिन दुर्भाग्य से इस बारे में है कि क्या नियंत्रण अक्षम है या नहीं कुछ नहीं कहा।

+9

ध्यान दें कि आपके द्वारा लिंक किए गए दस्तावेज़ WPF का जिक्र कर रहे हैं, WinForms नहीं। उदाहरण के लिए, एक टूलस्ट्रिपमेनूइटम जिसमें एक शॉर्टकट कुंजी असाइन की गई है, दृश्यमान = गलत और सक्षम = ट्रू शॉर्टकट कुंजी दबाए जाने पर भी क्लिक क्लिक को बुलाया जाएगा, भले ही यह छिपा हुआ हो। –

+1

क्षमा करें - मैंने सोचा कि मैं WinForms पेड़ को ड्रिल कर रहा था।मैंने रेखा के साथ कहीं भी गलत लिंक मारा होगा। – ChrisF

2

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

मैं नहीं कहूंगा कि यह "गलत" है, हालांकि। मैं इसे "ओवरकिल" के रूप में वर्णित करता हूं।

5

एक त्वरित परीक्षण से पता चलता है कि झूठी के लिए दृश्यमान सेटिंग उस नियंत्रण के लिए त्वरक कुंजी को भी अक्षम करती है।

Win32 के तहत (यानी यह विंडोज फॉर्म पर लागू नहीं होता है), accelerators remain enabled जब नियंत्रण छुपाया जाता है लेकिन अक्षम नहीं होता है। मुझे लगता है कि यह वह संदर्भ है जिसके बारे में आप सोच रहे थे।

3

लेबल या टेक्स्ट बॉक्स जैसे मूल नियंत्रण के लिए, मुझे नहीं लगता कि यह आपके द्वारा उपयोग की जाने वाली विधि में कोई वास्तविक अंतर बनाता है।

लेकिन एक अधिक जटिल नियंत्रण पर विचार करें, जिसमें यह देखने के लिए एक टाइमर होता है कि प्रदर्शित करने के लिए नया डेटा है या नहीं; नियंत्रण को अक्षम करने से टाइमर को भी अक्षम किया जाता है।

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

एफडब्ल्यूआईडब्ल्यू, मैं उस व्यक्ति से असहमत हूं जिसने आपको बताया था कि यह गलत छिपाने और अक्षम करने के लिए है। मुझे लगता है कि ज्यादातर मामलों में यह अनावश्यक है।

1

.NET के बारे में निश्चित नहीं है, लेकिन क्रियालेख/फ्लेक्स में नियंत्रण के लिए तीन विशिष्ट गुण हैं जो बूलियन मान लेते हैं।

सक्षम

दिखाई

includeInLayout

दिखाई संपत्ति झूठी आस-पास रहता है और लेआउट कर सकते हैं प्रभाव की स्थापना। यह अभी भी प्रदर्शन रेंडरर द्वारा खींचा गया है। सेटिंग में शामिल हैं इनलायआउट संपत्ति इसे सभी को एक साथ प्रस्तुत करने से रोकती है। अक्सर मुझे नियंत्रण और मेरे विचार के साथ क्या करना है, इसके आधार पर सभी गुणों को शामिल करना उपयोगी लगता है। .NET में एक समान संपत्ति हो सकती है। किंतु मुझे यकीन नहीं है।

3

यदि आप तकनीकी मामलों की बजाय उपयोगिता के बारे में भी पूछ रहे हैं, तो मैं आपको चीजों को छिपाने की सलाह नहीं दूंगा (जब तक कि आप अपने आवेदन के वर्तमान "दृश्य" को पूरी तरह से बदल नहीं रहे), क्योंकि आम तौर पर यह कम परेशान होता है नियंत्रण अक्षम (यह आपको उस क्रिया के बारे में एक प्रतिक्रिया देता है जो आप करना चाहते हैं अभी तक तैयार नहीं है) इसे खोजने में कुछ सेकंड खर्च करने के बजाय, बस कुछ समय बाद महसूस किया जाना चाहिए कि इसे अक्षम किया जाना चाहिए क्योंकि इसका उपयोग करने के लिए पूर्व शर्त संतुष्ट नहीं हैं।

अगर आप पहले से ही इस बारे में जानते थे, बस इसे :-P

8

आप जब छुपा एक नियंत्रण प्रश्न में नियंत्रण पर निर्भर करता है, और बातचीत की किस तरह यह प्रदान करता है Enabled = false सेट करना होगा चाहे ध्यान न दें। कई नियंत्रणों के लिए (जैसे Button या CheckBox), Visible = false सेटिंग उपयोगकर्ता और नियंत्रण के बीच किसी भी बातचीत को रोकने के लिए पर्याप्त होगी।

लेकिन कुछ नियंत्रण (ऐसा लगता है कि यह विशेष रूप से शॉर्टकट कुंजी प्रॉपर्टी की पेशकश करता है), तब भी दिखाई देने पर उपयोगकर्ता इंटरैक्शन प्रदान करेगा। उदाहरण ToolStripMenuItem के लिए (और "पुराने" MenuItem) अभी भी अपने Click घटना लागू होगा जब शॉर्टकट कुंजी Visible जा रहा है true या false की, दबाया जाता है परवाह किए बिना।

Enabled = false सेट करना उन मामलों में शॉर्टकट कुंजी के माध्यम से Click ईवेंट को आक्रमण करने से रोक देगा। उस बिंदु से, मैं Win12orms एप्लिकेशन में नियंत्रण छुपाते समय Enabled = false सेट करने के खिलाफ सलाह दूंगा।

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