2009-10-11 10 views
6

मैं उस भाग पर अतिरिक्त पाठ के साथ अर्ध-पारदर्शी रूप का एक हिस्सा बनाना चाहता हूं जो पारदर्शी नहीं है।मैं सी # में आंशिक रूप से पारदर्शी रूप का हिस्सा कैसे बना सकता हूं?

मैं इसे सी # में कैसे पूरा कर सकता हूं?

उत्तर

7

मुझे नहीं लगता कि आप पारदर्शिता लागू कर सकते हैं करते हैं (अधिक सही ढंग से कहा, अस्पष्टता) पूरा, पूरे फार्म एक रूप के बजाय का केवल एक हिस्सा है।

हालांकि, आप उस रूप के विभिन्न हिस्सों को पारदर्शी होने के साथ, आसानी से एक कस्टम आकार का रूप (यानी गैर-आयताकार) बना सकते हैं। सटीक "देखो" के आधार पर जिसे आप प्राप्त करने का प्रयास कर रहे हैं, यह आपके निकटतम हो सकता है।

अपने स्वयं के कस्टम के आकार बनाने के लिए इन लिंक पर एक नज़र डालें:

Creating Custom Shaped Windows Forms in .NET
Custom shaped form with a drop down in C#
Shaped Windows Forms and Controls in Visual Studio .NET

केवल अन्य विकल्प दो रूपों, जिनमें से एक सेट है प्रदर्शित करने के लिए किया जा सकता है आंशिक रूप से पारदर्शी होना। आपको प्रोग्रामेटिक रूप से यह सुनिश्चित करना होगा कि दूसरा फॉर्म "मुख्य" फ़ॉर्म के बगल में तुरंत स्थित है, और जब उपयोगकर्ता "मुख्य" रूप को स्थानांतरित/आकार देता है तो उसे आनुपातिक रूप से स्थानांतरित/आकार दिया जाता है। यद्यपि यह दो रूपों में है, यह उपयोगकर्ता को देखने के लिए बनाया जा सकता है, यह वास्तव में केवल एक रूप है, हालांकि यह खींचने के लिए काफी मुश्किल हो सकता है, और यह एक आदर्श समाधान नहीं होगा (लेकिन "पर्याप्त" पर्याप्त हो सकता है आपकी सटीक जरूरतों पर)।

0

मुझे यकीन नहीं है कि WinForms के साथ यह संभव है कि बिना पी/आवेदक कॉल और वर्कअराउंड का उपयोग न करें।

आप इसके बजाय विंडोज प्रेजेंटेशन फाउंडेशन (डब्ल्यूपीएफ) का उपयोग करना चाह सकते हैं, जहां ऐसे प्रभाव लागू करने के लिए लगभग तुच्छ हैं।

+0

क्यों -1? मेरे जवाब में क्या गलत था? WinForms में आप केवल पूर्ण रूप पर पारदर्शिता सेट कर सकते हैं लेकिन इसके हिस्सों पर नहीं, इसलिए मुझे संदेह है कि इसे आसानी से किया जा सकता है।डाउनवोट का सामना करने के लिए – codymanix

+0

+1। WinForms में ऐसा करना मुश्किल नहीं है, लेकिन यह * थोड़ा हैकी है और WPF * इस तरह की चीज़ के लिए बेहतर है (हालांकि एमएस इंजीनियरों आपके लिए सबकुछ करते हैं तो यह कम मजेदार है)। – MusiGenesis

+0

कम से कम आपके "कम मज़ेदार" तर्क को बहुत विवादास्पद माना जा सकता है .. – codymanix

0

सरल:

myForm.Opacity = 80; // Change 80 with your value 
+2

@FBSC - इससे पूर्ण रूप की अस्पष्टता बदल जाएगी। ऐसा लगता है कि मूल प्रश्न पूछने वाला केवल फॉर्म के एक हिस्से की अस्पष्टता को बदलना चाहता है, न कि पूरे रूप में। – CraigTP

+0

क्षमा करें, मैंने उस "भाग" को छोड़ दिया: एस – FBSC

5

आप अपने फॉर्म में पूरी तरह से पारदर्शी विंडो बनाकर और फिर पूर्ण-पारदर्शी विंडो पर अर्ध-पारदर्शी रूप बनाकर ऐसा कर सकते हैं।

सबसे पहले, अपने मुख्य रूप की TransparencyKey को Color.Red पर सेट करें, फिर फॉर्म पर panel1 नामक एक पैनल रखें, और इसके बैककोलर को लाल पर सेट करें। यह पूरी तरह पारदर्शी "विंडो" बनाएगा। इस तरह एक रूप स्तरीय पर्चा संदर्भ बनाएँ:

private Form _floater; 

इसके बाद, अपने मुख्य रूप के लोड घटना में इस कोड डाल: अंत में

_floater = new Form(); 
_floater.ShowInTaskbar = false; 
_floater.FormBorderStyle = FormBorderStyle.None; 
_floater.Opacity = .5; 
_floater.Size = panel1.Size; 
_floater.StartPosition = FormStartPosition.Manual; 
_floater.Location = panel1.PointToScreen(new Point(0, 0)); 
_floater.Show(this); 

, अपने मुख्य प्रपत्र की चाल स्पर्धा में इस कोड डाल:

_floater.Location = panel1.PointToScreen(new Point(0, 0)); 

यहां एकमात्र मुद्दा यह है कि यदि उपयोगकर्ता सेमी-पारदर्शी "विंडो" में क्लिक करता है, तो दूसरा फॉर्म फोकस प्राप्त करेगा, इसलिए आपका मुख्य रूप का शीर्षकबार ग्रे हो गया है।

Click here एक फॉर्म पर इस अर्ध-पारदर्शी विंडो के साथ नमूना अनुप्रयोग चलाने के लिए।

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