सी # में एक पेड़-दृश्य वरीयता संवाद इंटरफ़ेस का प्रकार कैसे बनाएं?

मैं एक ऐसा एप्लीकेशन लिख रहा हूं जो मूल रूप से सिर्फ वरीयता संवाद है, जो ट्री-व्यू वरीयता संवाद की तरह है जो विजुअल स्टूडियो स्वयं ही उपयोग करता है। एप्लिकेशन का फ़ंक्शन सीरियल डिवाइस से डेटा में डेटा के लिए बस पास-थ्रू होता है। यह फाइल पर लिखने से पहले डेटा पर कई सारे बदलाव करता है, इसलिए एप्लिकेशन के लिए जीयूआई बस उन सभी सेटिंग्स को निर्देशित करता है जो निर्देशित करते हैं कि ये परिवर्तन क्या होना चाहिए।

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

फॉर्म डिज़ाइन

असल में मुझे इस जगह पर कंटेनर नियंत्रण के साथ इस विशाल रूप से काम करना है, और फिर इसे सभी काम करने के लिए रन-टाइम रीफॉर्मिंग का एक गुच्छा करना है। यह अतिरिक्त काम के बहुत जैसा लगता है। क्या मैं इसे पूरी तरह बेवकूफ तरीके से कर रहा हूं? क्या ऐसा करने का कुछ "स्पष्ट" आसान तरीका है कि मैं याद कर रहा हूं?

0
जोड़ा संपादित
विचारों: 5

3 उत्तर

ग्रेग हर्लमैन ने लिखा:

ग्रिड में नोड का चयन करते समय उचित कंटेनर को क्यों न दिखाएं / छुपाएं? कंटेनरों को एक ही स्थान पर उचित रूप से आकार दिया गया है, और सभी को डिफ़ॉल्ट रूप से छुपाएं, जिसे लोड पर ग्रिड में पूर्व निर्धारित किया जाएगा।

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

मुझे डंकन के जवाब पसंद हैं क्योंकि इसका मतलब है कि प्रत्येक नोड के इंटरफ़ेस का डिज़ाइन पूरी तरह से अलग रखा जा सकता है। इसका मतलब है कि मुझे स्नैपिंग दिशानिर्देशों और अन्य डिज़ाइन समय लाभों पर ओवरलैप नहीं मिलता है।

0
जोड़ा

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

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

मैं थोड़ा उत्सुक हूं कि आप नियंत्रणों के मूल्यों के भार / बचत को कैसे संभालना चाहते हैं? यदि आपके सभी पृष्ठ एक बड़े फॉर्म में हैं तो एक वर्ग में बहुत सारे कोड होना चाहिए?

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

0
जोड़ा

प्रत्येक 'फलक' के लिए अलग-अलग रूपों को बनाने और प्रत्येक प्रपत्र कन्स्ट्रक्टर में सेट करने का एक आसान तरीका है

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

इस तरह, इन दोनों रूपों में से प्रत्येक को अपने डिजाइनर में रखा जा सकता है, रनटाइम पर एक या अधिक बार तत्काल, और सामान्य नियंत्रण जैसे खाली क्षेत्र में जोड़ा जाता है।

शायद मुख्य रूप एक पैनल में एक TreeView के साथ एक SplitContainer का उपयोग कर सकता है, और इन रूपों को दूसरे में जोड़ने के लिए स्थान। एक बार उन्हें जोड़े जाने के बाद, उन्हें छुपाएं / दिखाएं या BringToFront / SendToBack विधियों का उपयोग करके फ़्लिप किया जा सकता है।

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
0
जोड़ा