yangyin
2025-02-28 baa80d650adebcce70f1113cc1020c6039c159a0
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
 
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
{
    [Designer(typeof(Design.Designer.WenButtonDesigner))]
    public partial class WenButton : WenControl
    {
        public WenButton() : base()
        {
            InitializeComponent();
            this.Size = new Size(80, 30);
        }
        public WenButton(string text) : this()
        {
            Text = text;
        }
 
        #region 私有属性
 
        private Color backColor = Color.Transparent;
        private Image image = null;
        private Size imageSize = new Size(32, 32);
 
        #endregion
 
        #region 公有属性
        [Category("Wen"), DefaultValue(null)]
        public Image Image { get => image; set { image = value; this.Invalidate(); } }
        [Category("Wen")]
        [DefaultValue(typeof(Size), "32,32")]
        public Size ImageSize { get => imageSize; set { imageSize = value; this.Invalidate(); } }
        [Category("Wen")]
        [DefaultValue(TextImageRelation.ImageBeforeText)]
        public TextImageRelation TextImageRelation { get; set; } = TextImageRelation.ImageBeforeText;
 
        public override string Text { get => base.Text; set { base.Text = value; this.Invalidate(); } }
 
        [Category("Wen"), Description("边框样式"), DefaultValue(WenButtonBorderStyle.None)]
        public WenButtonBorderStyle BorderStyle { get; set; }
        #endregion
 
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;
            Rectangle rec = this.ClientRectangle;
 
            Brush brush = new SolidBrush(this.ForeColor);
            if (!this.Enabled)
                brush = new SolidBrush(Color.FromArgb(100, 100, 100));
 
            Rectangle recimage;
            Rectangle recString;
            if (TextImageRelation == TextImageRelation.ImageAboveText)
            {
                //图标绘制靠上居中
                recimage = new Rectangle((this.Width - ImageSize.Width) / 2, 3, ImageSize.Width, ImageSize.Height);
                recString = new Rectangle(0, 3 + ImageSize.Height, this.Width, this.Height - 3 - ImageSize.Height);
                if (Image != null)
                    g.DrawImage(Image, recimage);
                g.DrawString(this.Text, Font, brush, recString, ControlHelper.StringContersCenter);
            }
            else if (TextImageRelation == TextImageRelation.Overlay || Image == null)
            {
                //图标绘制靠上居中
                recimage = new Rectangle((this.Width - ImageSize.Width) / 2, (this.Height - ImageSize.Height) / 2, ImageSize.Width, ImageSize.Height);
                _ = new Rectangle(0, 3 + ImageSize.Height, this.Width, this.Height - 3 - ImageSize.Height);
                if (Image != null)
                    g.DrawImage(Image, recimage);
                g.DrawString(this.Text, Font, brush, rec, ControlHelper.StringContersCenter);
            }
            else
            {
                //其他都是图标坐标文字靠图标
                recimage = new Rectangle(2, (this.Height - ImageSize.Height) / 2, ImageSize.Width, ImageSize.Height);
                recString = new Rectangle(2 + ImageSize.Width + 2, 0, this.Width - ImageSize.Width - 6, this.Height);
                if (Image != null)
                    g.DrawImage(Image, recimage);
                g.DrawString(this.Text, Font, brush, recString, ControlHelper.StringConters);
            }
 
 
            //绘制图框
            using Pen pen = new Pen(Color.FromArgb(153, 153, 153));
            switch (BorderStyle)
            {
                case WenButtonBorderStyle.Rectangle:
                    g.DrawRectangle(pen, new Rectangle(0, 0, this.Width - 1, this.Height - 1));
                    break;
                case WenButtonBorderStyle.RoRectangle:
                    System.Drawing.Drawing2D.GraphicsPath path = ControlHelper.CreateRoundedRectanglePath(new Rectangle(0, 0, Width - 1, Height - 1), 10);
                    g.DrawPath(pen, path);
                    break;
                default:
                    break;
            }
 
 
        }
        protected override void OnMouseLeave(EventArgs e)
        {
            base.OnMouseLeave(e);
            this.BackColor = this.backColor;
        }
        protected override void OnMouseEnter(EventArgs e)
        {
            base.OnMouseEnter(e);
            this.backColor = this.BackColor;
            this.BackColor = Color.FromArgb(63, 63, 65);
        }
        protected override void OnClick(EventArgs e)
        {
            base.OnClick(e);
        }
 
        public enum WenButtonBorderStyle
        {
            None,
            Rectangle,
            RoRectangle,
        }
    }
}