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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
 
namespace DPumpHydr.WinFrmUI.WenSkin.Controls.ListBoxControl
{
    [ToolboxItem(false)]
    public class WenListBoxControlItemTemplate : WenControl
    {
        public WenListBoxControlItemTemplate() : base()
        {
            Size = new Size(100, 30);
            this.AddControlButton();
            this.AddControlRemoveButton();
        }
 
        private Color backColor = Color.Transparent;
        private WenButton removeButton;
        private WenButton button;
 
        #region 公有属性
 
        /// <summary>
        /// 是否显示删除按钮,仅对非模板生效
        /// </summary>
        [Category("Wen"), Description("是否显示删除按钮"), DefaultValue(true)]
        public bool RemoveButtonShow
        {
            get => removeButton != null && removeButton.Visible;
            set { if (removeButton != null) removeButton.Visible = value; }
        }
        /// <summary>
        /// 是否显示自定义按钮
        /// </summary>
        [Category("Wen"), Description("是否显示自定义按钮"), DefaultValue(true)]
        public bool ButtonShow
        {
            get => button != null && button.Visible;
            set { if (button != null) button.Visible = value; }
        }
        /// <summary>
        /// 按钮图标
        /// </summary>
        [Category("Wen"), Description("按钮图标"), DefaultValue(true)]
        public Image ButtonImage
        {
            get => button?.Image;
            set { if (button != null) button.Image = value; }
        }
        #endregion
 
        #region 委托
 
        public event EventClass.ObjectEventHandler RemoveClick;
        public event EventClass.ObjectEventHandler ButtonClick;
 
        public void OnRemoveClick()
        {
            RemoveClick?.Invoke(this, new EventClass.ObjectEventArgs() { Value = this });
        }
        public virtual void OnButtonClick()
        {
            ButtonClick?.Invoke(this, new EventClass.ObjectEventArgs() { Value = this });
        }
 
        #endregion
 
        private void AddControlRemoveButton()
        {
            removeButton = new WenButton
            {
                Image = Properties.Resources.remove,
                ImageSize = new Size(16, 16),
                Dock = DockStyle.Right,
                Width = 30,
                TextImageRelation = TextImageRelation.Overlay
            };
            removeButton.MouseEnter += (s, e) =>
            {
                backColor = this.BackColor;
                this.BackColor = Color.FromArgb(73, 73, 75);
            };
            removeButton.MouseLeave += (s, e) =>
            {
                this.BackColor = backColor;
            };
            removeButton.Click += (s, e) =>
            {
                OnRemoveClick();
            };
            this.Controls.Add(removeButton);
        }
        private void AddControlButton()
        {
            button = new WenButton
            {
                Image = null,
                ImageSize = new Size(16, 16),
                Dock = DockStyle.Right,
                Width = 30,
                TextImageRelation = TextImageRelation.Overlay
            };
            button.MouseEnter += (s, e) =>
            {
                backColor = this.BackColor;
                this.BackColor = Color.FromArgb(73, 73, 75);
            };
            button.MouseLeave += (s, e) =>
            {
                this.BackColor = backColor;
            };
            button.Click += (s, e) =>
            {
                OnButtonClick();
            };
            this.Controls.Add(button);
        }
 
        protected override void WenOnPaint(Graphics g, Rectangle rec, PaintEventArgs e)
        {
            base.WenOnPaint(g, rec, e);
            g.DrawString(this.Text, this.Font, new SolidBrush(this.ForeColor), rec, ControlHelper.StringConters);
        }
 
        #region 重写
 
        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);
        }
        #endregion
    }
}