.net - मैं WinForms में किसी पैनल की अस्पष्टता या पारदर्शिता कैसे सेट कर सकता हूं?




transparency panel (6)

इसे इस्तेमाल करे:

panel1.BackColor = Color.FromArgb(100, 88, 44, 55);

वांछित अस्पष्टता प्राप्त करने के लिए अल्फा (ए) बदलें।

मैं सोच रहा था कि सी # में किसी पैनल की पारदर्शिता को कैसे बदलना या संशोधित करना, पूरे फॉर्म पर नहीं, बल्कि पैनल .. मैंने ओपेसिटी पर कई सी # ट्यूटोरियल देखे हैं, लेकिन यह फॉर्म के लिए है। मैं केवल पैनल के साथ यह कैसे संभव हो सकता है के लिए देख रहा हूँ। धन्यवाद!


कुछ टिप्पणियां कहती हैं कि यह काम करती है और कुछ कहते हैं कि यह केवल आपके form पृष्ठभूमि के लिए काम नहीं करता है, इसके पीछे कोई अन्य controls नहीं है


जहां तक ​​मुझे पता है कि पैनल में केवल पारदर्शी रंग हो सकता है, आप पैनल की अस्पष्टता को नियंत्रित नहीं कर सकते हैं। तो, आप पैनल के कुछ हिस्सों को पूरी तरह पारदर्शी कर सकते हैं लेकिन कुछ कहने के लिए 50% नहीं।

पारदर्शिता का उपयोग करने के लिए आपको पारदर्शी रंग संपत्ति को परिभाषित करना होगा।


जो भी अभी भी पूरी तरह से पारदर्शी पैनल की तलाश में है, मुझे विलियम स्मैश द्वारा इस ब्लॉग में एक अच्छा समाधान मिला, जिसने बदले में इसे अपने टी # ब्लॉग पर टोबीस हर्टकोर्न से लिया है। मैंने सोचा कि इसे यहां एक उत्तर के रूप में पोस्ट करने के लायक है।

सी # कोड:

public class TransparentPanel : Panel
{
    protected override CreateParams CreateParams 
    {            
        get {
            CreateParams cp =  base.CreateParams;
            cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
            return cp;
            }
    }
    protected override void OnPaintBackground(PaintEventArgs e) 
    {
        //base.OnPaintBackground(e);
    }
}

वीबी नेट कोड:

Public Class TransparentPanel
Inherits Panel
    Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H20 ''#WS_EX_TRANSPARENT
            Return cp
        End Get
    End Property
    Protected Overrides Sub OnPaintBackground(ByVal e As System.Windows.Forms.PaintEventArgs)
    ''#MyBase.OnPaintBackground(e)
    End Sub
End Class

यह मेरे लिए काम करता है। नीचे उदाहरण में, अल्फा रेंज 0 से 255 के बीच एक मान हो सकती है। पहले, मैंने यह सोचकर गलती की कि यह प्रतिशत का मूल्य होना चाहिए।

Dim x as integer = 230 Panel1.BackColor = Color.FromArgb(x, Color.Blue)


हां, अस्पष्टता केवल शीर्ष-स्तरीय विंडो पर काम कर सकती है। यह वीडियो एडाप्टर की एक हार्डवेयर सुविधा का उपयोग करता है, जो कि पैनल की तरह विंडोज़ विंडो का समर्थन नहीं करता है। Winforms में एकमात्र शीर्ष-स्तरीय नियंत्रण व्युत्पन्न वर्ग फॉर्म है।

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

यह नमूना फॉर्म इसे काम पर दिखाता है:

public partial class Form1 : Form {
    public Form1() {
        InitializeComponent();
        this.BackColor = Color.White;
        panel1.BackColor = Color.FromArgb(25, Color.Black);
    }
    protected override void OnPaint(PaintEventArgs e) {
        e.Graphics.DrawLine(Pens.Yellow, 0, 0, 100, 100);
    }
}

यदि यह पर्याप्त नहीं है तो आपको एक दूसरे के शीर्ष पर रूपों को ढेर करने पर विचार करना होगा। इस तरह

उल्लेखनीय है कि यह प्रतिबंध विंडोज 8 में उठाया गया है। यह अब वीडियो एडेप्टर ओवरले फीचर और डीडब्लूएम (उर्फ एयरो) का उपयोग नहीं कर सकता है। जो लागू करने में आसान बाल खिड़कियों पर अस्पष्टता / पारदर्शिता बनाता है। इस पर निर्भर होने के लिए आने वाले समय के लिए निश्चित रूप से भविष्य-संगीत है। विंडोज 7 अगला एक्सपी होगा :)







opacity