2008-09-30 34 views
128

यदि आप किसी अन्य पैनल एक फार्म पर एक पैनल बनाते हैं और करने के लिए डॉक = शीर्ष यह सेट और ड्रॉप और सेट अपने डॉक = भरें, यह पूरे फार्म भर सकते हैं, पहले पैनल की अनदेखी । टैब ऑर्डर बदलना कुछ भी नहीं करता है।Panel.Dock भरण अन्य Panel.Dock की स्थापना अनदेखी

उत्तर

275

डॉकिंग लेआउट ऑब्जेक्ट पर भाई नियंत्रणों पर निर्भर करता है। नियंत्रण "बटन अप" डॉक किए जाते हैं, इसलिए संग्रह में अंतिम नियंत्रण पहले डॉक किया जाता है। एक डॉक कंट्रोल केवल का लेआउट लेता है, पहले डॉक भाई बहनों को खाते में ले जाता है। इसलिए डॉक = भरने के साथ नियंत्रण भाई क्रम में पहला (शीर्ष) होना चाहिए, यदि आप इसे अन्य डॉक किए गए नियंत्रणों को ध्यान में रखना चाहते हैं। यदि यह पहला नियंत्रण नहीं है, तो पहले के नियंत्रण इसे ओवरलैप करेंगे।

यह भ्रमित हो सकता है क्योंकि भाई-आदेश दृश्य क्रम के समान नहीं है, और भाई आदेश डिजाइन दृश्य से हमेशा स्पष्ट नहीं होता है।

दस्तावेज़ रूपरेखा विंडो (देखें -> अन्य विंडोज़ -> दस्तावेज़ रूपरेखा) नियंत्रण पदानुक्रम और क्रम पर उपयोगी पेड़-दृश्य देता है, और आपको नियंत्रण के भाई क्रम को बदलने की अनुमति देता है।

आप संदर्भ मेनू द्वारा सीधे डिजाइनर में भाई आदेश भी बदल सकते हैं -> सामने/पीछे वापस भेजना, जो नियंत्रण को भाई बहनों के पहले या आखिरी स्थान पर ले जाता है। ये मेनू लेबल कुछ हद तक भ्रमित हो सकते हैं क्योंकि वास्तविक प्रभाव लेआउट मॉडल पर निर्भर करता है।

तय तैनात नियंत्रण में, 2 डी स्थिति भाई क्रम से स्वतंत्र है, लेकिन जब नियंत्रण अतिव्यापी हैं, नियंत्रण आदेश में जल्द से जल्द "शीर्ष पर" हो जाएगा, क्रम में बाद में भाई बहन का हिस्सा छुपा। इस संदर्भ में सामने लाने/वापस भेजने के लिए समझ में आता है।

प्रवाह- या तालिका-लेआउट पैनलों के अंदर, निर्माण आदेश नियंत्रण के दृश्य क्रम को निर्धारित करता है। कोई ओवरलैपिंग नियंत्रण नहीं है। तो सामने लाएं/वापस भेजने के लिए वास्तव में नियंत्रण के क्रम में पहला या आखिरी मतलब है।

डॉक किए गए लेआउट के साथ, सामने लाने/वापस भेजने के लिए और भी भ्रमित हो सकता है क्योंकि यह निर्धारित करता है कि डॉकिंग की गणना किस क्रम में की जाती है, इसलिए भरने वाले नियंत्रण पर "सामने लाएं" नियंत्रण में नियंत्रण रखेगा माता-पिता के मध्य, सभी एज-डॉक किए गए नियंत्रणों को ध्यान में रखते हुए।

+1

मेरे पास एक पैनल, स्टेटस स्ट्रिप और मेन्यू स्ट्रिप एक फॉर्म पर है और ऐसा लगता है कि जब मैं शीर्ष पर मेन्यू स्ट्रिप डॉक करता हूं, नीचे स्टेटस स्ट्रिप करता है, और पैनल भरता है, पैनल बीच में स्थान नहीं भरता है दो स्ट्रिप्स जब तक कि यह पहला भाई नहीं है (दो स्ट्रिप्स के ऊपर दस्तावेज़ रूपरेखा विंडो के शीर्ष पर)। स्ट्रिप्स पर पैनल को नीचे ले जाना ("आखिरी" की तरफ)। तो क्या डॉक = भरना नियंत्रण वास्तव में आदेश में पहला भाई होना चाहिए? क्या मैं यह गलत पढ़ रहा हूँ? मैं 3.5 (2008) का उपयोग कर रहा हूं। क्या यह परिवर्तन हुआ? – jrsconfitto

+42

टीएल; डॉ; डॉक = भरने के साथ पैनल पर राइट क्लिक करें और 'फ्रंट टू फ्रंट' पर क्लिक करें। – kristianp

+0

मेरे पास एक पैनल के अंदर 3 ग्रुपबॉक्स हैं और बस @ जुगलिंगनटकेस की तरह मुझे उन्हें आदेश देना पड़ा था: डॉक.फिल, डॉक.बॉटम और आखिरकार डॉक.ओप के बाद, उन्हें 3 सही ढंग से डॉक करने के लिए। किसी भी मामले में, भयानक पोस्ट! दस्तावेज़ आउटलाइन विंडो के लिए –

90

अधिकार के साथ डॉक = भरें और क्लिक करें पैनल पर क्लिक करें 'सामने लाएं'।

इस जिसके खाते में एक ही कंटेनर में अन्य नियंत्रण पर डॉक सेटिंग लेता है इस पर नियंत्रण पिछले बनाया जा बनाता है।

+1

सरल, आकस्मिक धन, यह वास्तव में कष्टप्रद हो गया था मुझे – smirkingman

+0

भावना बनाता है एक बार आप इसके बारे में सोचते हैं। –

+0

यह जानकर अच्छा लगा, धन्यवाद! – LuckyLuke82

7

एक और संभावित रूप से क्लीनर विकल्प TableLayout नियंत्रण का प्रयोग है। अपने शीर्ष डॉक के लिए वांछित ऊंचाई की एक पंक्ति सेट करें, और अपनी पंक्ति के लिए 100% भरने के लिए एक और पंक्ति सेट करें। भरने के लिए दोनों पैनलों को सेट करें, और आप कर चुके हैं।

शीर्ष मद (TableLayout कुछ करने के लिए है, हालांकि इस्तेमाल करने लगता है।)

+1

लेआउट प्रदर्शन के लिए डॉकिंग कन्टरोल की तुलना में टेबललाउट भी धीमा है, खासकर अगर आपके पास नेस्टेड उपयोगकर्ता नियंत्रण है जो टेबललेआउट का उपयोग करता है। हालांकि, यह सुनिश्चित करने के लिए एक अच्छा लेआउट पैदा करता है। – Nick

+1

क्या यह प्रदर्शन किसी औसत उपयोगकर्ता को ऊपर वर्णित अनुसार दो पैनलों के साधारण मामले में देखा जाएगा? या क्या ऐसा कुछ है जब वे दर्जनों यूसी हैं, सभी लेआउट के साथ, सभी एक लेआउट में? (विडंबना यह है कि जिस ऐप पर मैं वर्तमान में काम कर रहा हूं वह इस तरह है, और प्रदर्शन ठीक लगता है ...) –

+0

टेबललाइट बहुत हल्का वजन है। यदि आप कुछ नियंत्रण डाल रहे हैं तो आपको प्रदर्शन समस्याएं दिखाई नहीं देगी। – Tim

0

यहाँ एक चाल है कि मेरे लिए काम किया है ..

प्लेस और यह शीर्ष गोदी।

प्लेस एक स्प्लिटर, और यह भी यह शीर्ष गोदी, तो सेट यह विकलांग (जब तक आप शीर्ष आकार बदलने के लिए चाहते हैं)।

फिर भरें को भरें वस्तु और डॉकिंग सेट रखें। ऑब्जेक्ट स्प्लिटर के नीचे रहेगा।

+0

आपको यह काम करने के लिए एक स्प्लिटर का उपयोग करने की आवश्यकता नहीं है। –

1

जैक्सबी को दस्तावेज़ रूपरेखा के साथ विचार था लेकिन पदानुक्रम ने मेरी समस्या का समाधान नहीं किया। मेरे नियंत्रण एक पदानुक्रमित शैली में नहीं थे, वे सिर्फ उसी माता-पिता के साथ सूचीबद्ध थे।

मैंने सीखा कि अगर आपने ऑर्डर बदल दिया है तो यह वैसे ही ठीक होगा जिस तरह से आप इसे देखना चाहते हैं।

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

5

मुझे एक ही समस्या है और मैं इसे हल करने में कामयाब रहा।
यदि आपके पास 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. 
+0

मुझे यह बहुत परीक्षण और त्रुटि के बाद मिला। – tzot

0

आप कोड के अंदर तत्वों का क्रम बदलने के लिए नहीं करना चाहते हैं, तो आप विधि कंटेनर का उपयोग कर सकते हैं। कंटेनर के साथ नियंत्रण। SetChildIndex() उदाहरण के लिए फॉर्म, पैनल इत्यादि। आप अपने नियंत्रण जोड़ना चाहते हैं।

उदाहरण:

 //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; 
संबंधित मुद्दे