• 保存到桌面加入收藏设为首页
技术

C# TransparentPanel 组件的实现方法

作者:CrazyEditor   来源:CrazyEditor.cn  

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();
            }
        }
 
    }
}


上一篇:没有了
下一篇:C# 遍历资源图片
本栏最新更新
本栏推荐
阅读排行

(C) 2018-2019 疯狂小编