2008-12-17 7 views
5

मैं जो मैन्युअल रूप से नियंत्रण की तरहएक usercontrol की मूल स्थापना में पारदर्शिता रखने

MyUserControl ctrl = new MyUserControl(); 

कुछ के साथ बनाई गई है करने के लिए डिजाइन किया गया है एक सरल उपयोगकर्ता नियंत्रण बना लिया है से BackColor = Color.Transparent रोकता है और यह ठीक काम करता है, जब तक कि मैं अभिभावक को उस रूप में नियंत्रण के सेट पर सेट करता हूं, जिस समय यह फ़ॉर्म के रंग में बदल जाता है।

इसकी पारदर्शी की तरह लग सकता है लेकिन यह क्या है जो फॉर्म पर मौजूद सभी नियंत्रणों को छुपाता है। मुझे 100% यकीन नहीं है कि यह नियंत्रण एक ठोस पृष्ठभूमि या कुछ और हो रहा है जो मैं इसे हुक करता हूं, जो अन्य नियंत्रणों को दिखने से रोकता है।

मूल रूप से यदि आप इस

  • एक रूप
  • बनाएं बटन के लिए उस पर एक बटन ड्रॉप
  • क्लिक हैंडलर में आप निम्न उपाय अपनाते हैं

उदाहरण

करना
MyUserControl ctrl = new MyUserControl(); 
ctrl.Parent = this; 
ctrl.BackColor = Color.Transparent; 
ctrl.Size = this.Parent.ClientRectangle.Size; 
ctrl.Location = this.Parent.ClientRectangle.Location; 
ctrl.BringToFront(); 
ctrl.Show(); 

असल में मैं फॉर्म पर अंडरलेइंग नियंत्रण दिखाते हुए उपयोगकर्ता नियंत्रण को पूरे रूप में ओवरले करना चाहते हैं (इसलिए पारदर्शी पृष्ठभूमि)। मैं इसे फॉर्म कंट्रोल संग्रह में जोड़ना नहीं चाहता क्योंकि यह वास्तव में फॉर्म से संबंधित नहीं है, यह सिर्फ बाकी सब कुछ के ऊपर दिखाया जा रहा है

मैंने ऐसा करने की कोशिश की, लेकिन माता-पिता को सेट किए बिना, लेकिन फिर नियंत्रण बिल्कुल नहीं दिखाया गया।

धन्यवाद!

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

उत्तर

6

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

काफी बेकार, और सही नहीं, लेकिन यह काम करना चाहिए।

+0

क्या आपका मतलब है कि नियंत्रण विंडो बनाते समय मुझे WS_CLIPCHILDREN ध्वज का उपयोग करना चाहिए? – TheCodeJunkie

+0

नहीं, मुझे नहीं लगता कि आपका मतलब है WS_EX_TRANSPARENT – TheCodeJunkie

+1

मैंने इसे अभी देखा है। आपको EXPRANSPARENT (0x00000020) के साथ CreateParams ऑब्जेक्ट्स की ExStyle प्रॉपर्टी चाहिए या –

संबंधित मुद्दे