c# - ভিজ্যুয়াল স্টুডিও উইন্ডো ফর্মের একটি প্যানেলে অস্বচ্ছতা ব্যবহার করার জন্য কোন কৌশল?




.net winforms (2)

  1. Panel থেকে উত্তরাধিকার সূত্রে একটি বর্গ তৈরি করুন।
  2. কনস্ট্রাক্টর নিয়ন্ত্রণের জন্য স্টাইল ControlStyle.Opaque সেট করুন।

যদি সত্য হয় তবে নিয়ন্ত্রণটি অস্বচ্ছভাবে আঁকা হয় এবং পটভূমি আঁকা হয় না।

  1. CreateParams ওভাররাইড CreateParams এবং এর জন্য WS_EX_TRANSPARENT শৈলী সেট করুন।

উল্লেখ করে যে এই স্টাইলটি দিয়ে তৈরি একটি উইন্ডোটি স্বচ্ছ হতে হবে। অর্থাৎ, উইন্ডোর নীচে থাকা কোনও উইন্ডো উইন্ডো দ্বারা অস্পষ্ট হয় না। এই স্টাইলের সাহায্যে তৈরি একটি উইন্ডো ডাব্লুএমএপিএএনটি বার্তাগুলি কেবল তার নীচে সমস্ত ভাইবাল উইন্ডো আপডেট হওয়ার পরে প্রাপ্ত করে।

  1. একটি Opacity সম্পত্তি তৈরি করুন যা 0 থেকে 100 পর্যন্ত মান গ্রহণ করে যা পটভূমির আলফা চ্যানেল হিসাবে ব্যবহৃত হবে।
  2. OnPaint ওভাররাইড OnPaint এবং একটি আলফা সক্ষম Brush ব্যবহার করে ব্যাকগ্রাউন্ডটি পূরণ করুন যা ব্যাকগ্রাউন্ড BackGroundColor এবং BackGroundColor থেকে তৈরি করা হয়েছে।

সম্পূর্ণ কোড

public class ExtendedPanel : Panel
{
    private const int WS_EX_TRANSPARENT = 0x20;
    public ExtendedPanel()
    {
        SetStyle(ControlStyles.Opaque, true);
    }

    private int opacity = 50;
    [DefaultValue(50)]
    public int Opacity
    {
        get
        {
            return this.opacity;
        }
        set
        {
            if (value < 0 || value > 100)
                throw new ArgumentException("value must be between 0 and 100");
            this.opacity = value;
        }
    }
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
            return cp;
        }
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        using (var brush = new SolidBrush(Color.FromArgb(this.opacity * 255 / 100, this.BackColor)))
        {
            e.Graphics.FillRectangle(brush, this.ClientRectangle);
        }
        base.OnPaint(e);
    }
}

স্ক্রিনশট

আমি সম্প্রতি ভিজ্যুয়াল স্টুডিও অন্বেষণ শুরু করেছি। আমি একটি স্লাইড মেনু তৈরি করার চেষ্টা করছিলাম। আরও সুনির্দিষ্টভাবে, যখন ব্যবহারকারী বোতাম টিপবেন তখন একটি সাবমেনু ডানদিকে নেমে যাবে। এটি অর্জন করার জন্য আমি নিজের আকার পরিবর্তন করতে একটি Panel রেখেছি। কার্যকারিতা ছাড়াও আমি আরও কিছু নকশা যুক্ত করতে এবং Panel কিছুটা বিবর্ণ করে তুলতে চাই।

আমি জানি যে ভিজ্যুয়াল স্টুডিওতে Panels অস্বচ্ছতা নেই, তবে আমি ভাবছিলাম যে কেউ কীভাবে এটি অর্জন করা যায় সে সম্পর্কে কোনও উপায়-কৌশল-ধারণা জানেন। আমি একটি Picture Box চেষ্টা করেছিলাম কিন্তু এটিরও সম্পত্তি হিসাবে অস্বচ্ছতা ছিল না। আমি ভিজ্যুয়াল স্টুডিওগুলি যে নিয়মিত Menu অবজেক্ট দেয় তা ব্যবহার করা এড়িয়ে চলেছি কারণ আমি আরও ডিজাইন যুক্ত করতে চেয়েছিলাম। কোন ধারনা?


একটি নিয়ন্ত্রণ "স্বচ্ছ" করতে, আপনার নিয়ন্ত্রণের উপর তার পিতামাতার সঠিক অঞ্চলটি আঁকতে হবে। Button এর বিষয়বস্তু আঁকার আগে যা করে তাই গোলাকার কোণগুলি স্বচ্ছ হবে।

অর্ধ-স্বচ্ছতার নকল করতে, আপনি প্যানেলটিতে ফর্মটি আঁকতে পারেন, এবং তারপরে আলফা দিয়ে কিছু আঁকুন:

private void panel1_Paint(object sender, PaintEventArgs e)
{
    PaintTransparentBackground(panel1, e);
    using (Brush b = new SolidBrush(Color.FromArgb(128, panel1.BackColor)))
    {
        e.Graphics.FillRectangle(b, e.ClipRectangle);
    }
}

private static void PaintTransparentBackground(Control c, PaintEventArgs e)
{
    if (c.Parent == null || !Application.RenderWithVisualStyles)
        return;

    ButtonRenderer.DrawParentBackground(e.Graphics, c.ClientRectangle, c);
}

দয়া করে নোট করুন যে ButtonRenderer.DrawParentBackground নিয়ন্ত্রণগুলি ButtonRenderer.DrawParentBackground না যা প্যানেলের সাথে ওভারল্যাপ করে তবে কেবল ফর্মের পটভূমি।







opacity