2009-10-20 10 views
6

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

कोई आधुनिक एप्लिकेशन, या तो WinForms या WPF में ऐसा कुछ कैसे बनाएगा?

  • कई विंडोज है:

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

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

मुझे आश्चर्य है कि कोई बेहतर तरीका है या नहीं? अनिवार्य रूप से कुछ ऐसा कहता है, "देखो, मुझे सीमा शैली/आइकन या मुख्य मेनू पट्टी जैसी चीजों की परवाह नहीं है। मैं चाहता हूं कि आप इस स्क्रीन को इस क्षेत्र में प्रस्तुत करें"। किंडा जैसे एएसपीनेट मास्टर पेजेस जहां वास्तविक पृष्ठ केवल प्लेसहोल्डर्स में प्रदान की जाने वाली सामग्री को परिभाषित करते हैं।

क्या कुछ उचित तंत्र ऐसा कुछ करने के लिए है?

या क्या पूरे दृष्टिकोण में कुछ गड़बड़ है?

उत्तर

7

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

+1

+1; मैं बस इस जवाब की एक भिन्नता लिख ​​रहा था। अब मुझे नहीं करना है! –

+0

यह एक अच्छा विचार है, विशेष रूप से क्योंकि उपयोगकर्ता नियंत्रण को अन्य कंटेनर 8 में पैनल के समान रखा जा सकता है), जो प्रबंधन को दर्द रहित बनाता है। –

1

मैंने इसे पूरा करने के लिए एक विशिष्ट ढांचे के बारे में नहीं सुना है, लेकिन मैं प्रत्येक पृष्ठ को उपयोगकर्ता नियंत्रण, या संभवतः वांछित प्रतिपादन तर्क के साथ नियंत्रण का उप-वर्ग बनाउंगा। ये पृष्ठ नियंत्रण सभी फॉर्म के सदस्य होंगे, और आवश्यकतानुसार इसके नियंत्रण संग्रह में जोड़ा जाएगा (या यदि उनमें से बहुत से हैं, तो आवश्यकतानुसार बनाए गए हैं)। उनके पास प्रारंभ में सेट Dock = DockStyle.Fill जैसे गुण होंगे। जब बदलते पृष्ठों:

void ChangePage(object sender, EventArgs e) 
{ 
    Controls.Clear(); 
    Controls.Add(sender as Control); 
}
3

ध्यान में रखकर आप WPF उल्लेख किया है, यह है कि Prism (एमपीपी से समग्र यूआई ढांचे) लागू करेगा उल्लेख के लायक है कि का उपयोग कर उन्हें कई दृश्यों (UserControls) या तो एक एकल नियंत्रक के भीतर (एक ही सामान्य कुल के लिए) या एकाधिक नियंत्रक (कई समेकन में)।

या तो दृश्य या उसके प्रस्तुतकर्ता कमांड को ट्रिगर कर सकते हैं (या आईवेन्टएग्रेगेटर के माध्यम से एक ईवेंट प्रसारित कर सकते हैं) और आपके नेविगेशन नियंत्रक उपयुक्त "क्षेत्र" को निर्दिष्ट वर्तमान दृश्य को बदलकर प्रतिक्रिया दे सकते हैं (आपके पास केवल एक हो सकता है)। वास्तव में, प्रिज्म का क्षेत्र मॉडल मास्टरपेज/प्लेसहोल्डर मॉडल के समान है, इसलिए आप इसे देखना चाहेंगे।

प्रिज्म में नेविगेशन इतिहास (पीछे/आगे) ट्रैकिंग भी शामिल हो सकती है, लेकिन अगर मैंने ऐसा किया है तो मैंने इसका उपयोग नहीं किया है।

1

मैं एक सी # डेवलपर के रूप में काम करता हूं और मैं आपको बता सकता हूं कि चरण-दर-चरण मैं एकाधिक स्क्रीन (पृष्ठों) अनुप्रयोगों के लिए UserControl का उपयोग शुरू करता हूं। मैं बेस पेज नामक एक पेज के लिए अपनी बेस क्लास का निर्माण करता हूं जो UserControl को बढ़ाता है और मैं इसे हर पृष्ठ के लिए विस्तारित करता हूं (मेनपेज, सेटिंग्सपेज इत्यादि)। मेनफॉर्म (ऐप का एकमात्र रूप) में मैंने बेसपेज कंट्रोल (उदा। नामित वर्तमान पृष्ठ) जोड़ा है जहां मैं आवश्यक पृष्ठ लोड कर सकता हूं। मेनफॉर्म से मैं वर्तमान घटनाओं को आवश्यक घटनाएं भेजता हूं। मुझे लगता है कि इस तरह के आवेदन के लिए यह सबसे अच्छा समाधान है जहां आपको एक रूप में कई रूपों की आवश्यकता है। यह वह संरचना है जिसका उपयोग मैं अपने सभी एकाधिक पृष्ठों के अनुप्रयोगों के लिए करता हूं।

यदि आप टैब नियंत्रण का उपयोग करते हैं तो आप एक ही समय में लोड किए गए सभी टैब से सभी नियंत्रणों के साथ अपने फॉर्म को चकित कर देंगे। मैंने 10+ टैब के साथ परियोजनाएं देखीं, बहुत ही जटिल अनुप्रयोग जो बहुत धीमी और कोड करने के लिए कठिन हैं।

मुझे आशा है कि आपको यह उत्तर उपयोगी लगेगा!

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