2010-07-09 11 views
23

का उपयोग कर नियंत्रण के जेड-ऑर्डर को कैसे सेट करें मैं एक कस्टम TextBox लिख रहा हूं कि फोकस प्राप्त करने पर इसकी सीमा शैली बदल जाती है।WinForms

सीमा जोड़ने के कारण नियंत्रण पड़ोसी लोगों के साथ ओवरलैप हो जाता है, मैं अस्थायी रूप से संवाद बॉक्स के सामने टेक्स्ट बॉक्स लाता हूं (textBox.BringToFront() का उपयोग करके)।

हालांकि, एक बार संपादन पूर्ण हो गया है और ध्यान खो गया है, मैं नियंत्रण को वापस जेड-ऑर्डर में अपनी मूल स्थिति में भेजना चाहता हूं।

यह संभव (अधिमानतः में एक आसान तरीका!) है

उत्तर

33

कॉल माता पिता की Controls संग्रह का GetChildIndex और SetChildIndex तरीकों।

+1

महान - BringToFront() मैं इन तरीकों के लिए गलत जगह पर देखा द्वारा भटक नेतृत्व में: नियंत्रण के तरीकों, नहीं माता पिता के नियंत्रण 'के तरीकों पर । धन्यवाद। –

+2

कोई उदाहरण नहीं है –

+0

कोई आवश्यकता उदाहरण नहीं है, इसका उत्तर यह स्वयं पर्याप्त है! – Caverna

16

वीबी में कोई ज़ेड-ऑर्डर नहीं है, लेकिन आप GetChildIndex और SetChildIndex विधियों को मैन्युअल रूप से प्राप्त करने और सेट करने के तरीकों का उपयोग कर सकते हैं।

Here इसका उपयोग करने का एक उदाहरण है। आपको शायद प्रत्येक नियंत्रण सूचकांक का रिकॉर्ड रखने की आवश्यकता होगी, हालांकि इसे समाप्त होने पर आप इसे वापस सेट कर सकते हैं।

इस तरह शायद है कि तुम क्या कर रहे हैं के बाद:

// Get the controls index 
int zIndex = parentControl.Controls.GetChildIndex(textBox); 
// Bring it to the front 
textBox.BringToFront(); 
// Do something... 
// Then send it back again 
parentControl.Controls.SetChildIndex(textBox, zIndex); 
+2

जब आप गतिशील रूप से नियंत्रण (इन) दृश्यमान करते हैं तो सबकुछ बदल जाता है। 'Textbox.Visible = true' सेट करें और इसमें अनुक्रमणिका 0 होगा। यह दस्तावेज़ रूपरेखा से ऑर्डर को अनदेखा करता है। मुझे यह समझने में थोड़ी देर लग गई :) – FrankyHollywood

+0

इसे भी समझने की कोशिश कर रहा था। इस टिप्पणी ने मुझे मदद की। धन्यवाद –