यदि आप एक फॉर्म पर एक पैनल बनाते हैं और इसे डॉक = टॉप पर सेट करते हैं और दूसरे पैनल को ड्रॉप करते हैं और इसका डॉक = फिल सेट करते हैं, तो यह पहले पैनल को अनदेखा करते हुए पूरे फॉर्म को भर सकता है। टैब ऑर्डर बदलने से कुछ नहीं होता है।
यदि आप एक फॉर्म पर एक पैनल बनाते हैं और इसे डॉक = टॉप पर सेट करते हैं और दूसरे पैनल को ड्रॉप करते हैं और इसका डॉक = फिल सेट करते हैं, तो यह पहले पैनल को अनदेखा करते हुए पूरे फॉर्म को भर सकता है। टैब ऑर्डर बदलने से कुछ नहीं होता है।
जवाबों:
डॉकिंग लेआउट सिबलिंग नियंत्रण के आदेश पर निर्भर करता है। नियंत्रण "बटन अप" डॉक किए जाते हैं, इसलिए संग्रह में अंतिम नियंत्रण पहले डॉक किया जाता है । डॉक किए गए नियंत्रण केवल पहले से डॉक किए गए भाई-बहनों के लेआउट को ध्यान में रखते हैं। इसलिए सिबलिंग ऑर्डर में डॉक = फिल के साथ नियंत्रण पहले (शीर्ष) होना चाहिए, यदि आप चाहते हैं कि यह अन्य डॉक किए गए नियंत्रणों को ध्यान में रखे। यदि यह पहला नियंत्रण नहीं है, तो पहले के नियंत्रण इसे ओवरलैप कर देंगे।
यह भ्रामक हो सकता है क्योंकि सिबलिंग-ऑर्डर जरूरी नहीं कि विज़ुअल ऑर्डर के समान हो, और सिबलिंग ऑर्डर हमेशा डिज़ाइन दृश्य से स्पष्ट नहीं होता है।
दस्तावेज़ रूपरेखा विंडो (देखें -> अन्य विंडोज -> दस्तावेज़ रूपरेखा) नियंत्रण पदानुक्रम और व्यवस्था पर एक उपयोगी पेड़-दृश्य देता है, और आप नियंत्रण के भाई क्रम बदलने के लिए अनुमति देता है।
आप संदर्भ मेनू द्वारा डिजाइनर में सीधे सिबलिंग ऑर्डर को भी बदल सकते हैं -> सामने लाएं / वापस भेजें, जो नियंत्रण को भाई-बहनों के पहले या अंतिम स्थान पर ले जाता है। ये मेनू लेबल कुछ हद तक भ्रमित हो सकते हैं क्योंकि वास्तविक प्रभाव लेआउट मॉडल पर निर्भर करता है।
नियत नियत नियंत्रणों के साथ, 2 डी स्थिति भाई के आदेश से स्वतंत्र होती है, लेकिन जब नियंत्रण अतिव्यापी हो जाता है, तो क्रम में जल्द से जल्द नियंत्रण "शीर्ष पर" होगा, भाई-बहन के हिस्से को बाद में क्रम में छिपाते हुए। इस संदर्भ में सामने लाओ / भेजें वापस समझ में आता है।
अंदर प्रवाह- या तालिका-लेआउट पैनल, निर्माण क्रम नियंत्रण के दृश्य क्रम को निर्धारित करता है। कोई अतिव्यापी नियंत्रण नहीं है। तो सामने लाओ / वापस भेजें वास्तव में इसका मतलब है कि नियंत्रण के क्रम में पहले या आखिरी करें।
डॉक किए गए लेआउट के साथ, सामने लाने / वापस भेजने के लिए और भी अधिक भ्रामक हो सकता है क्योंकि यह निर्धारित करता है कि डॉकिंग की गणना किस क्रम में की जाती है, इसलिए डॉक किए गए नियंत्रण पर "सामने लाएं" अभिभावक के मध्य में नियंत्रण को स्थापित करेगा खाते में सभी किनारे-डॉक किए गए नियंत्रणों को लेना।
Dock = Fill वाले पैनल पर राइट क्लिक करें और with फ्रंट टू फ्रंट ’पर क्लिक करें।
यह इस नियंत्रण को अंतिम बनाता है, जो एक ही कंटेनर में अन्य नियंत्रणों पर डॉक सेटिंग्स को ध्यान में रखता है।
एक अन्य, संभावित क्लीनर विकल्प टेबललाइट कंट्रोल का उपयोग करना है। अपने शीर्ष डॉक के लिए वांछित ऊंचाई की एक पंक्ति सेट करें, और अपने नीचे के लिए 100% भरने के लिए एक और पंक्ति। फिल के अंदर दोनों पैनल सेट करें, और आप कर रहे हैं।
(TableLayout कुछ करने के लिए इस्तेमाल किया जा रहा है, हालांकि)
मुझे एक ही समस्या है और मैं इसे हल करने में कामयाब रहा।
यदि आपके पास DockStyle.Fill
दूसरों के साथ एक कंटेनर है , तो डॉकस्टाइल भी होना चाहिए लेकिन शीर्ष या जो आप चाहते हैं।
नियंत्रण के साथ जोड़ना महत्वपूर्ण बात है DockStyle.Fill
पहले फिर दूसरों है।
उदाहरण:
ComboBox cb = new ComboBox();
cb.Dock = DockStyle.Top;
GridView gv = new GridView();
gv.Dock = DockStyle.Fill;
Controls.Add(gv); // this is okay
Controls.Add(cb);
लेकिन अगर हम पहले सी.बी.
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.
यदि आप कोड के अंदर तत्वों के क्रम को बदलना नहीं चाहते हैं, तो आप कंटेनर कंटेनर विधि का उपयोग कर सकते हैं। कॉन्ट्रोल्स।सीटिलहिल्डेक्स () कंटेनर के साथ जैसे कि फॉर्म, पैनल आदि आप अपने नियंत्रणों को जोड़ना चाहते हैं।
उदाहरण:
//Container ------------------------------------
Panel Container = new Panel();
//Top-Docked Element ---------------------------
ButtonArea = new FlowLayoutPanel();
Container.Controls.Add(ButtonArea);
Container.Controls.SetChildIndex(ButtonArea, 1);
ButtonArea.Dock = DockStyle.Top;
//Fill-Docked Element --------------------------
box = new RichTextBox();
Container.Controls.Add(box);
Container.Controls.SetChildIndex(box, 0); //setting this to 0 does the trick
box.Dock = DockStyle.Fill;
दस्तावेज की रूपरेखा के साथ जैक्सबी का विचार था लेकिन पदानुक्रम ने मेरी समस्या का समाधान नहीं किया। मेरे नियंत्रण एक पदानुक्रमित शैली में नहीं थे, वे सिर्फ एक ही माता-पिता के साथ सूचीबद्ध थे।
मैंने सीखा है कि यदि आपने आदेश को बदल दिया है तो यह उस तरीके को ठीक कर देगा जैसे आप उसे देखना चाहते हैं।
सूची के निचले भाग पर नियंत्रण दस्तावेज़ की रूपरेखा विंडो में इसके शीर्ष पर नियंत्रण को ओवरलैप करेगा। आपके मामले में आप यह सुनिश्चित करेंगे कि पहला पैनल दूसरे पैनल के नीचे है और आगे है।
यहाँ एक चाल है कि मेरे लिए काम किया है ..
शीर्ष आइटम रखें और इसे शीर्ष डॉक करें।
एक स्प्लिटर रखें, और इसे शीर्ष पर डॉक भी करें, फिर इसे अक्षम करें (जब तक आप शीर्ष का आकार बदलना नहीं चाहते हैं)।
फिर Fill ऑब्जेक्ट रखें और Docking को Fill पर सेट करें। वस्तु फाड़नेवाला से नीचे रहेगी।
मैं उसी मुद्दे में भाग गया। मेरा रन समय के दौरान मेनू पट्टी के नीचे नए / कस्टम नियंत्रण जोड़ने के साथ था। जब डॉक किया गया तो समस्या नियंत्रण थी, फॉर्म के ऊपर से डॉक करने का निर्णय लिया और पूरी तरह से मेनू स्ट्रिप को पूरी तरह से नजरअंदाज करते हुए मुझसे पूछा तो बहुत गुस्सा आ रहा था। चूंकि यह कोड के साथ गतिशील रूप से किया जाना था और डिजाइन मोड के दौरान यह बहुत निराशाजनक हो गया था। सबसे आसान तरीका मुझे लगता है कि डिजाइन मोड के दौरान एक पैनल बनाना और मेनू पट्टी के नीचे डॉक करना है। वहाँ से आप बस पैनल में नियंत्रण जोड़ सकते हैं / हटा सकते हैं और आप इसे रन टाइम के दौरान डॉक कर सकते हैं। अपने फॉर्म पर अपने सभी नियंत्रणों के साथ गड़बड़ करने की आवश्यकता नहीं है जो वास्तव में बदलने की आवश्यकता नहीं है, बहुत अधिक काम जो आपको वास्तव में करने की आवश्यकता पर निर्भर करता है।
object.dock = Fill
Panel.Controls.Add(object)
मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन मैंने कुछ उपयोगी की खोज की। गतिशील रूप से बनाए गए नियंत्रण (ओं) के लिए सिबलिंग ऑर्डर को प्रोग्रामेटिक रूप से समायोजित करने के लिए, आप कुछ ऐसा कर सकते हैं:
parentForm.Controls.SetChildIndex (myPanel, 0)
मेरे मामले में, मैंने अपने फॉर्म में पहला नियंत्रण होने के लिए डॉक / फिल पैनल को स्थानांतरित करने के लिए ऐसा किया ताकि यह डॉक / टॉप (एक मेनू स्ट्रिप) पर सेट किए गए दूसरे डॉक किए गए नियंत्रण के साथ ओवरलैप न हो।