• c# 可以设置透明度的 Panel 组件


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Text;
    using System.Windows.Forms;
    
    namespace TransparentPanelTest
    {
        public class TransparentPanel : Control
        {
            private Color _borderColor;
            private int _borderWidth = 1;
            private DashStyle _borderStyle = DashStyle.Solid;
            private int _opacity = 125;
    
            public TransparentPanel()
            {
                
            }
    
            #region Property
            [Category("Custom"), Description("Border Color")]
            public Color BorderColor
            {
                set { _borderColor = value; }
                get { return _borderColor; }
            }
    
            [Category("Custom"), Description("Border Width"), DefaultValue(1)]
            public int BorderWidth
            {
                set
                {
                    if (value < 0) value = 0;
                    _borderWidth = value;
                }
                get { return _borderWidth; }
            }
    
            [Category("Custom"), Description("Border Style"), DefaultValue(DashStyle.Solid)]
            public DashStyle BorderStyle
            {
                set { this._borderStyle = value; this.Invalidate(); }
                get { return this._borderStyle; }
            }
    
            [Bindable(true), Category("Custom"), DefaultValue(125), Description("背景的透明度. 有效值0-255")]
            public int Opacity
            {
                get { return _opacity; }
                set
                {
                    if (value > 255) value = 255;
                    else if (value < 0) value = 0;
                    _opacity = value;
                    this.Invalidate();
                }
            }
            #endregion
    
            protected override void OnPaintBackground(PaintEventArgs e)
            {
                //do not allow the background to be painted 
            }
    
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
                    return cp;
                }
            }
    
            protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
            {
                if (this._opacity > 0)
                {
                    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(this._opacity, this.BackColor)),
                                             this.ClientRectangle);
                }
                if (this._borderWidth > 0)
                {
                    Pen pen = new Pen(this._borderColor, this._borderWidth);
                    pen.DashStyle = this._borderStyle;
                    e.Graphics.DrawRectangle(pen, e.ClipRectangle.Left, e.ClipRectangle.Top, this.Width - 1, this.Height - 1);
                    pen.Dispose();
                }
            }
    
        }
    }
    
  • 相关阅读:
    NOIP2016-2020 复盘
    「笔记」线段树合并/分裂
    「笔记」线性基
    20210628模拟赛解题报告
    「笔记」左偏树
    题解 CF718C Sasha and Array
    一些杂碎的知识点
    20210614 模拟赛
    洛谷 P4249 [WC2007]剪刀石头布
    CF132E Bits of merry old England
  • 原文地址:https://www.cnblogs.com/chengulv/p/3495284.html
Copyright © 2020-2023  润新知