2010-03-08 11 views
5

प्री नेट मैं एमएफसी, ON_UPDATE_COMMAND_UI और सीसीएमडीयूआई कक्षा का उपयोग अपने विंडोज़ यूआई की स्थिति को अपडेट करने के लिए कर रहा था। पुराने एमएफसी/विन 32 संदर्भ से:विंडोज़ फॉर्मों में यूआई ऑब्जेक्ट्स को अपडेट करना

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

प्रोग्राम की स्थिति में बदलाव के रूप में इन आइटमों की स्थिति अपडेट करता है? तार्किक रूप से, यदि कोई मेनू आइटम कमांड उत्पन्न करता है, जिसे दस्तावेज़ द्वारा संभाला जाता है, तो यह समझता है कि दस्तावेज़ मेनू आइटम अपडेट करें। दस्तावेज़ में शायद जानकारी है जिस पर अद्यतन आधारित है।

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

ढांचे स्वचालित रूप से उपयोगकर्ता इंटरफ़ेस वस्तुओं को अद्यतन करने के लिए एक सुविधाजनक इंटरफेस प्रदान करता है। आप को किसी अन्य तरीके से अपडेट करने के लिए चुन सकते हैं, लेकिन प्रदान किया गया इंटरफ़ेस कुशल और उपयोग करने में आसान है।

.NET विंडोज फॉर्म के लिए मार्गदर्शन क्या है? मैं एक आवेदन का उपयोग कर रहा हूं। मुख्य हैंडलर मुख्य रूप में है लेकिन मुझे यकीन नहीं है कि यह करने का यह सबसे अच्छा तरीका है। जब तक मैंने अपने सभी UI अपडेट को निष्क्रिय ईवेंट हैंडलर में रखा, तब तक मेरे ऐप ने कुछ प्रदर्शन समस्याओं को दिखाना शुरू कर दिया, और मेरे पास अभी तक इसे ट्रैक करने के लिए मीट्रिक नहीं है। यकीन नहीं है कि यह संबंधित है।

+0

वास्तव में आप फिर से करने की कोशिश कर रहे हैं: नीचे दिए गए लिंक उपयोगी संसाधनों कर रहे हैं? क्या आप WinForms अनुप्रयोगों पर नियंत्रण अक्षम करने की कोशिश कर रहे हैं? –

+0

टूलबार बटन, मेनू आइटम इत्यादि अक्षम/सक्षम करें टूलबार पर चेक बटन की स्थिति को चेक/अनचेक करें, मेनू आइटम जो चेक स्टेट दिखाते हैं। इस तरह की चीज। बहुत नियमित सामान। –

+2

हां, आवेदन। आईडी। ऐप निष्क्रिय होने पर आप एक पेर्फ समस्या कैसे प्राप्त कर सकते हैं रहस्यमय है। –

उत्तर

1

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

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

0

बस अपनी संपत्ति बदलें, उदा।

obj.Enabled = true; 

या

obj.Enabled = false; 

उस वस्तु की संपत्ति स्वचालित रूप से, .Invalidate() या .Refresh() आप के लिए फोन करेगा तो नियंत्रण स्वचालित रूप से रंगा जाना चाहिए।

यदि आप एक बड़ा काम करना चाहते हैं जो यूआई को कई सेकंड के लिए अवरुद्ध करेगा, तो यह Threads + Delegates का उपयोग करने लायक है।

+0

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

+0

अच्छी तरह से इसका मतलब है कि बड़े आकार के लिए एप्लिकेशन। हाथ-हैंडलर। आपको वास्तव में ऐसा नहीं करना चाहिए। जब यह असफल हो तो बस करो। उदाहरण: एक बटन पर एक ऑनक्लिक-ईवेंट जोड़ें। अपने हैंडलर में, एक और नियंत्रण अक्षम करें। इसे application.idle में मत डालो। –

1

AFAIK, मानक .NET System.Windows.Forms दुनिया में, यह कार्यक्षमता बॉक्स के बाहर उपलब्ध नहीं है। इस समस्या का उत्तर कुछ तरीकों से दिया जा सकता है।

OnUpdate equivalent

ActionLists for Windows forms

Command UI Updating Windows Forms in C#

+1

मैंने इनमें से कुछ लिंक पहले देखा और मेरे पास कमांड पैटर्न का अपना कार्यान्वयन है। ये सभी लोग आवेदन कर रहे हैं। अद्यतन करने के लिए इडल इवेंट। मुझे लगता है कि इसमें सब कुछ है। हालांकि पुराने सी ++ एमएफसी रास्ता बहुत अच्छा था। –

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