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

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

Posted on 2013-12-28 13:47 快乐家++ 阅读(7419) 评论(2) 编辑 收藏

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

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

            }

        }

 

    }

}

posted @ 2019-09-05 09:04  grj001  阅读(269)  评论(0编辑  收藏  举报