2011-05-26 14 views
6

मैं वीएस -2010 डिजाइनर में कुछ डॉक किए गए पैनल के लिए जेड-ऑर्डर बदलने की कोशिश कर रहा हूं। हालांकि, हर बार जब मैं डिज़ाइनर को सहेजता हूं, इसे बंद कर देता हूं और इसे फिर से खोलता हूं, तो ज़ेड-ऑर्डर वापस आ गया है कि मैंने इसे बदलने से पहले कैसे किया था।वीएस -2010 डिजाइनर जेड-ऑर्डर

मैंने दस्तावेज़ रूपरेखा और SendToBack संदर्भ मेनू का उपयोग करने का प्रयास किया है, लेकिन दोनों एक ही तरीके से व्यवहार करते हैं। मैंने यह भी देखा है कि एक और समाधान में जहां यह काम करता है, .designer.cs फ़ाइल वास्तव में परिवर्तित नहीं होती है (मुझे लगता है कि नियंत्रण जोड़ने का क्रम जेड-ऑर्डर को निर्देशित करेगा)।

क्या कोई और तरीका है जो मैं कर सकता हूं? मैं वास्तव में कार्यावधि में यह करने के लिए नहीं चाहता ...

संपादित

this.mainPanel.BackColor = System.Drawing.SystemColors.Control; 
this.mainPanel.Controls.Add(this.pnlRangeSelector); 
this.mainPanel.Controls.Add(this.headerAndFooterRowCounts); 

pnlRangeSelector Dock.Top headerAndFooterRowCounts है Dock.Right

जब यह तथापि प्रस्तुत हुई है, headerAndFooterRowCounts लेता है इसके मूल पैनल के पूरे दाहिने तरफ, जबकि pnlRangeSlector वामपंथी भाग लेता है।

यह मुझे बताता है कि pnlRangeSelector पीछे की तरह सही नहीं है जैसा कि यह माना जाता है।

enter image description here

अद्यतन

int i = 0; 
String output = String.Empty; 
foreach (var c in this.mainPanel.Controls) 
{ 
    if (c == pnlRangeSelector) { output += "RangeSelector at : " + i.ToString() + "\r\n"; } 
    else if (c == this.headerAndFooterRowCounts) { output += "HeaderAndFooter at : " + i.ToString() + "\r\n"; } 
    i++; 
} 
MessageBox.Show(output); 

लगता क्रम हमेशा RangeSelector = 0, HeaderAndFooter = 1. यहां तक ​​कि अगर मैं फोन निम्नलिखित सिर्फ इस से पहले है:

this.mainPanel.Controls.SetChildIndex(this.pnlRangeSelector, 1); 
this.mainPanel.Controls.SetChildIndex(this.headerAndFooterRowCounts, 0); 

उत्तर

1

जिस क्रम में नियंत्रण माता-पिता के नियंत्रण संग्रह में जोड़े जाते हैं, वह z-order निर्धारित करता है। तो हल करने के लिए सबसे अच्छा तरीका यह (AFAIK) डिजाइनर फ़ाइल का बैकअप बनाने के लिए और उसके बाद जिस क्रम में नियंत्रण संग्रह

पोस्ट कोड यदि आप मदद की ज़रूरत है के लिए जोड़ रहे संपादित है।

+0

नियंत्रण पहले से ही सही क्रम में जुड़ जाते हैं (पहली पृष्ठभूमि पैनल, अगले अग्रभूमि पैनल): यह है कि मैं क्या डिजाइनर कोड में किया था इस समस्या को ठीक करने के लिए है। – Ian

+0

संग्रह में घोषित या जोड़ा गया? क्या आप कोड पोस्ट कर सकते हैं? –

+0

डिजाइनर से जोड़ने कोड जोड़ा गया। – Ian

1

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

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

अंत में, मैंने पाया कि डिजाइनर विभिन्न नियंत्रणों के बाल सूचकांक को बदल रहा था।

//this.Controls.SetChildIndex(this.caseHeader, 0); 
+0

यह समस्या के स्रोत की पहचान करने के करीब है: मेरे लिए एक विशेष नियंत्रण के लिए और शायद दूसरों के लिए, डिजाइनर 'SetChildIndex() 'को कॉल करके जेड-ऑर्डर को घटा रहा है। हालांकि, अगर आप इसे डिज़ाइनर में टिप्पणी करते हैं, तो डिज़ाइनर आपके संपादन को अगली सहेज पर वापस लाएगा। तो यह एक समाधान नहीं है। – binki