前提
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
开源地址:https://gitee.com/kwwwvagaa/net_winform_custom_control
如果觉得写的还行,请点个 star 支持一下吧
准备工作
此控件用到了停靠窗体和日期控件的一个面板,以及基类控件,如果你还对此不了解,请移步
开始
添加一个用户控件,命名UCComboBox,继承自UCControlBase
属性
1 Color _ForeColor = Color.FromArgb(64, 64, 64); 2 [Description("文字颜色"), Category("自定义")] 3 public override Color ForeColor 4 { 5 get 6 { 7 return _ForeColor; 8 } 9 set 10 { 11 _ForeColor = value; 12 lblInput.ForeColor = value; 13 txtInput.ForeColor = value; 14 } 15 } 16 17 public event EventHandler SelectedChangedEvent; 18 public event EventHandler TextChangedEvent; 19 20 private ComboBoxStyle _BoxStyle = ComboBoxStyle.DropDown; 21 22 [Description("控件样式"), Category("自定义")] 23 public ComboBoxStyle BoxStyle 24 { 25 get { return _BoxStyle; } 26 set 27 { 28 _BoxStyle = value; 29 if (value == ComboBoxStyle.DropDownList) 30 { 31 lblInput.Visible = true; 32 txtInput.Visible = false; 33 } 34 else 35 { 36 lblInput.Visible = false; 37 txtInput.Visible = true; 38 } 39 40 if (this._BoxStyle == ComboBoxStyle.DropDownList) 41 { 42 txtInput.BackColor = _BackColor; 43 base.FillColor = _BackColor; 44 base.RectColor = _BackColor; 45 } 46 else 47 { 48 txtInput.BackColor = Color.White; 49 base.FillColor = Color.White; 50 base.RectColor = Color.FromArgb(220, 220, 220); 51 } 52 } 53 } 54 55 private Font _Font = new Font("微软雅黑", 12); 56 [Description("字体"), Category("自定义")] 57 public new Font Font 58 { 59 get { return _Font; } 60 set 61 { 62 _Font = value; 63 lblInput.Font = value; 64 txtInput.Font = value; 65 txtInput.PromptFont = value; 66 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2); 67 this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2); 68 } 69 } 70 71 72 [Obsolete("不再可用的属性")] 73 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 74 private new Color FillColor 75 { 76 get; 77 set; 78 } 79 80 [Obsolete("不再可用的属性")] 81 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 82 private new Color RectColor 83 { 84 get; 85 set; 86 } 87 88 private string _TextValue; 89 90 public string TextValue 91 { 92 get { return _TextValue; } 93 set 94 { 95 _TextValue = value; 96 if (lblInput.Text != value) 97 lblInput.Text = value; 98 if (txtInput.Text != value) 99 txtInput.Text = value; 100 } 101 } 102 103 private List<KeyValuePair<string, string>> _source = null; 104 105 public List<KeyValuePair<string, string>> Source 106 { 107 get { return _source; } 108 set 109 { 110 _source = value; 111 _selectedIndex = -1; 112 _selectedValue = ""; 113 _selectedItem = new KeyValuePair<string, string>(); 114 _selectedText = ""; 115 lblInput.Text = ""; 116 txtInput.Text = ""; 117 } 118 } 119 120 private KeyValuePair<string, string> _selectedItem = new KeyValuePair<string, string>(); 121 122 private int _selectedIndex = -1; 123 124 public int SelectedIndex 125 { 126 get 127 { 128 return _selectedIndex; 129 } 130 set 131 { 132 if (value < 0 || _source == null || _source.Count <= 0 || value >= _source.Count) 133 { 134 _selectedIndex = -1; 135 _selectedValue = ""; 136 _selectedItem = new KeyValuePair<string, string>(); 137 SelectedText = ""; 138 } 139 else 140 { 141 _selectedIndex = value; 142 _selectedItem = _source[value]; 143 _selectedValue = _source[value].Key; 144 SelectedText = _source[value].Value; 145 } 146 } 147 } 148 149 private string _selectedValue = ""; 150 151 public string SelectedValue 152 { 153 get 154 { 155 return _selectedValue; 156 } 157 set 158 { 159 if (_source == null || _source.Count <= 0) 160 { 161 SelectedText = ""; 162 _selectedValue = ""; 163 _selectedIndex = -1; 164 _selectedItem = new KeyValuePair<string, string>(); 165 } 166 else 167 { 168 for (int i = 0; i < _source.Count; i++) 169 { 170 if (_source[i].Key == value) 171 { 172 _selectedValue = value; 173 _selectedIndex = i; 174 _selectedItem = _source[i]; 175 SelectedText = _source[i].Value; 176 return; 177 } 178 } 179 _selectedValue = ""; 180 _selectedIndex = -1; 181 _selectedItem = new KeyValuePair<string, string>(); 182 SelectedText = ""; 183 } 184 } 185 } 186 187 private string _selectedText = ""; 188 189 public string SelectedText 190 { 191 get { return _selectedText; } 192 private set 193 { 194 _selectedText = value; 195 lblInput.Text = _selectedText; 196 txtInput.Text = _selectedText; 197 if (SelectedChangedEvent != null) 198 { 199 SelectedChangedEvent(this, null); 200 } 201 } 202 } 203 204 private int _ItemWidth = 70; 205 206 public int ItemWidth 207 { 208 get { return _ItemWidth; } 209 set { _ItemWidth = value; } 210 } 211 212 private int _dropPanelHeight = -1; 213 214 public int DropPanelHeight 215 { 216 get { return _dropPanelHeight; } 217 set { _dropPanelHeight = value; } 218 } 219 [Obsolete("不再可用的属性,如需要改变背景色,请使用BackColorExt")] 220 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 221 private new Color BackColor 222 { 223 get 224 { 225 return base.BackColor; 226 } 227 set 228 { 229 base.BackColor = Color.Transparent; 230 } 231 } 232 233 private Color _BackColor = Color.FromArgb(240, 240, 240); 234 235 public Color BackColorExt 236 { 237 get 238 { 239 return _BackColor; 240 } 241 set 242 { 243 if (value == Color.Transparent) 244 return; 245 _BackColor = value; 246 lblInput.BackColor = value; 247 248 if (this._BoxStyle == ComboBoxStyle.DropDownList) 249 { 250 txtInput.BackColor = value; 251 base.FillColor = value; 252 base.RectColor = value; 253 } 254 else 255 { 256 txtInput.BackColor = Color.White; 257 base.FillColor = Color.White; 258 base.RectColor = Color.FromArgb(220, 220, 220); 259 } 260 } 261 }
构造函数初始化处理
1 public UCComboBox() 2 { 3 InitializeComponent(); 4 lblInput.BackColor = _BackColor; 5 if (this._BoxStyle == ComboBoxStyle.DropDownList) 6 { 7 txtInput.BackColor = _BackColor; 8 base.FillColor = _BackColor; 9 base.RectColor = _BackColor; 10 } 11 else 12 { 13 txtInput.BackColor = Color.White; 14 base.FillColor = Color.White; 15 base.RectColor = Color.FromArgb(220, 220, 220); 16 } 17 base.BackColor = Color.Transparent; 18 }
一些事件处理
1 private void UCComboBox_SizeChanged(object sender, EventArgs e) 2 { 3 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2); 4 this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2); 5 } 6 7 private void txtInput_TextChanged(object sender, EventArgs e) 8 { 9 TextValue = txtInput.Text; 10 if (TextChangedEvent != null) 11 { 12 TextChangedEvent(this, null); 13 } 14 } 15 16 private void click_MouseDown(object sender, MouseEventArgs e) 17 { 18 if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false) 19 { 20 21 if (this.Source != null && this.Source.Count > 0) 22 { 23 int intRow = 0; 24 int intCom = 1; 25 var p = this.PointToScreen(this.Location); 26 while (true) 27 { 28 int intScreenHeight = Screen.PrimaryScreen.Bounds.Height; 29 if ((p.Y + this.Height + this.Source.Count / intCom * 50 < intScreenHeight || p.Y - this.Source.Count / intCom * 50 > 0) 30 && (_dropPanelHeight <= 0 ? true : (this.Source.Count / intCom * 50 <= _dropPanelHeight))) 31 { 32 intRow = this.Source.Count / intCom + (this.Source.Count % intCom != 0 ? 1 : 0); 33 break; 34 } 35 intCom++; 36 } 37 UCTimePanel ucTime = new UCTimePanel(); 38 ucTime.IsShowBorder = true; 39 int intWidth = this.Width / intCom; 40 if (intWidth < _ItemWidth) 41 intWidth = _ItemWidth; 42 Size size = new Size(intCom * intWidth, intRow * 50); 43 ucTime.Size = size; 44 ucTime.FirstEvent = true; 45 ucTime.SelectSourceEvent += ucTime_SelectSourceEvent; 46 ucTime.Row = intRow; 47 ucTime.Column = intCom; 48 List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>(); 49 foreach (var item in this.Source) 50 { 51 lst.Add(new KeyValuePair<string, string>(item.Key, item.Value)); 52 } 53 ucTime.Source = lst; 54 55 ucTime.SetSelect(_selectedValue); 56 57 _frmAnchor = new Forms.FrmAnchor(this, ucTime); 58 _frmAnchor.Load += (a, b) => { (a as Form).Size = size; }; 59 60 _frmAnchor.Show(this.FindForm()); 61 62 } 63 } 64 else 65 { 66 _frmAnchor.Close(); 67 } 68 } 69 70 71 Forms.FrmAnchor _frmAnchor; 72 void ucTime_SelectSourceEvent(object sender, EventArgs e) 73 { 74 if (_frmAnchor != null && !_frmAnchor.IsDisposed && _frmAnchor.Visible) 75 { 76 SelectedValue = sender.ToString(); 77 _frmAnchor.Close(); 78 } 79 } 80 81 private void UCComboBox_Load(object sender, EventArgs e) 82 { 83 if (this._BoxStyle == ComboBoxStyle.DropDownList) 84 { 85 txtInput.BackColor = _BackColor; 86 base.FillColor = _BackColor; 87 base.RectColor = _BackColor; 88 } 89 else 90 { 91 txtInput.BackColor = Color.White; 92 base.FillColor = Color.White; 93 base.RectColor = Color.FromArgb(220, 220, 220); 94 } 95 96 //if (this.Parent != null && BackColor == Color.Transparent) 97 } 98 } 99 }
完整代码如下
1 // 版权所有 黄正辉 交流群:568015492 QQ:623128629 2 // 文件名称:UCComboBox.cs 3 // 创建日期:2019-08-15 15:58:51 4 // 功能描述:ComboBox 5 // 项目地址:https://gitee.com/kwwwvagaa/net_winform_custom_control 6 using System; 7 using System.Collections.Generic; 8 using System.ComponentModel; 9 using System.Drawing; 10 using System.Data; 11 using System.Linq; 12 using System.Text; 13 using System.Windows.Forms; 14 15 namespace HZH_Controls.Controls 16 { 17 [DefaultEvent("SelectedChangedEvent")] 18 public partial class UCComboBox : UCControlBase 19 { 20 Color _ForeColor = Color.FromArgb(64, 64, 64); 21 [Description("文字颜色"), Category("自定义")] 22 public override Color ForeColor 23 { 24 get 25 { 26 return _ForeColor; 27 } 28 set 29 { 30 _ForeColor = value; 31 lblInput.ForeColor = value; 32 txtInput.ForeColor = value; 33 } 34 } 35 36 public event EventHandler SelectedChangedEvent; 37 public event EventHandler TextChangedEvent; 38 39 private ComboBoxStyle _BoxStyle = ComboBoxStyle.DropDown; 40 41 [Description("控件样式"), Category("自定义")] 42 public ComboBoxStyle BoxStyle 43 { 44 get { return _BoxStyle; } 45 set 46 { 47 _BoxStyle = value; 48 if (value == ComboBoxStyle.DropDownList) 49 { 50 lblInput.Visible = true; 51 txtInput.Visible = false; 52 } 53 else 54 { 55 lblInput.Visible = false; 56 txtInput.Visible = true; 57 } 58 59 if (this._BoxStyle == ComboBoxStyle.DropDownList) 60 { 61 txtInput.BackColor = _BackColor; 62 base.FillColor = _BackColor; 63 base.RectColor = _BackColor; 64 } 65 else 66 { 67 txtInput.BackColor = Color.White; 68 base.FillColor = Color.White; 69 base.RectColor = Color.FromArgb(220, 220, 220); 70 } 71 } 72 } 73 74 private Font _Font = new Font("微软雅黑", 12); 75 [Description("字体"), Category("自定义")] 76 public new Font Font 77 { 78 get { return _Font; } 79 set 80 { 81 _Font = value; 82 lblInput.Font = value; 83 txtInput.Font = value; 84 txtInput.PromptFont = value; 85 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2); 86 this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2); 87 } 88 } 89 90 91 [Obsolete("不再可用的属性")] 92 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 93 private new Color FillColor 94 { 95 get; 96 set; 97 } 98 99 [Obsolete("不再可用的属性")] 100 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 101 private new Color RectColor 102 { 103 get; 104 set; 105 } 106 107 private string _TextValue; 108 109 public string TextValue 110 { 111 get { return _TextValue; } 112 set 113 { 114 _TextValue = value; 115 if (lblInput.Text != value) 116 lblInput.Text = value; 117 if (txtInput.Text != value) 118 txtInput.Text = value; 119 } 120 } 121 122 private List<KeyValuePair<string, string>> _source = null; 123 124 public List<KeyValuePair<string, string>> Source 125 { 126 get { return _source; } 127 set 128 { 129 _source = value; 130 _selectedIndex = -1; 131 _selectedValue = ""; 132 _selectedItem = new KeyValuePair<string, string>(); 133 _selectedText = ""; 134 lblInput.Text = ""; 135 txtInput.Text = ""; 136 } 137 } 138 139 private KeyValuePair<string, string> _selectedItem = new KeyValuePair<string, string>(); 140 141 private int _selectedIndex = -1; 142 143 public int SelectedIndex 144 { 145 get 146 { 147 return _selectedIndex; 148 } 149 set 150 { 151 if (value < 0 || _source == null || _source.Count <= 0 || value >= _source.Count) 152 { 153 _selectedIndex = -1; 154 _selectedValue = ""; 155 _selectedItem = new KeyValuePair<string, string>(); 156 SelectedText = ""; 157 } 158 else 159 { 160 _selectedIndex = value; 161 _selectedItem = _source[value]; 162 _selectedValue = _source[value].Key; 163 SelectedText = _source[value].Value; 164 } 165 } 166 } 167 168 private string _selectedValue = ""; 169 170 public string SelectedValue 171 { 172 get 173 { 174 return _selectedValue; 175 } 176 set 177 { 178 if (_source == null || _source.Count <= 0) 179 { 180 SelectedText = ""; 181 _selectedValue = ""; 182 _selectedIndex = -1; 183 _selectedItem = new KeyValuePair<string, string>(); 184 } 185 else 186 { 187 for (int i = 0; i < _source.Count; i++) 188 { 189 if (_source[i].Key == value) 190 { 191 _selectedValue = value; 192 _selectedIndex = i; 193 _selectedItem = _source[i]; 194 SelectedText = _source[i].Value; 195 return; 196 } 197 } 198 _selectedValue = ""; 199 _selectedIndex = -1; 200 _selectedItem = new KeyValuePair<string, string>(); 201 SelectedText = ""; 202 } 203 } 204 } 205 206 private string _selectedText = ""; 207 208 public string SelectedText 209 { 210 get { return _selectedText; } 211 private set 212 { 213 _selectedText = value; 214 lblInput.Text = _selectedText; 215 txtInput.Text = _selectedText; 216 if (SelectedChangedEvent != null) 217 { 218 SelectedChangedEvent(this, null); 219 } 220 } 221 } 222 223 private int _ItemWidth = 70; 224 225 public int ItemWidth 226 { 227 get { return _ItemWidth; } 228 set { _ItemWidth = value; } 229 } 230 231 private int _dropPanelHeight = -1; 232 233 public int DropPanelHeight 234 { 235 get { return _dropPanelHeight; } 236 set { _dropPanelHeight = value; } 237 } 238 [Obsolete("不再可用的属性,如需要改变背景色,请使用BackColorExt")] 239 [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 240 private new Color BackColor 241 { 242 get 243 { 244 return base.BackColor; 245 } 246 set 247 { 248 base.BackColor = Color.Transparent; 249 } 250 } 251 252 private Color _BackColor = Color.FromArgb(240, 240, 240); 253 254 public Color BackColorExt 255 { 256 get 257 { 258 return _BackColor; 259 } 260 set 261 { 262 if (value == Color.Transparent) 263 return; 264 _BackColor = value; 265 lblInput.BackColor = value; 266 267 if (this._BoxStyle == ComboBoxStyle.DropDownList) 268 { 269 txtInput.BackColor = value; 270 base.FillColor = value; 271 base.RectColor = value; 272 } 273 else 274 { 275 txtInput.BackColor = Color.White; 276 base.FillColor = Color.White; 277 base.RectColor = Color.FromArgb(220, 220, 220); 278 } 279 } 280 } 281 282 public UCComboBox() 283 { 284 InitializeComponent(); 285 lblInput.BackColor = _BackColor; 286 if (this._BoxStyle == ComboBoxStyle.DropDownList) 287 { 288 txtInput.BackColor = _BackColor; 289 base.FillColor = _BackColor; 290 base.RectColor = _BackColor; 291 } 292 else 293 { 294 txtInput.BackColor = Color.White; 295 base.FillColor = Color.White; 296 base.RectColor = Color.FromArgb(220, 220, 220); 297 } 298 base.BackColor = Color.Transparent; 299 } 300 301 private void UCComboBox_SizeChanged(object sender, EventArgs e) 302 { 303 this.txtInput.Location = new Point(this.txtInput.Location.X, (this.Height - txtInput.Height) / 2); 304 this.lblInput.Location = new Point(this.lblInput.Location.X, (this.Height - lblInput.Height) / 2); 305 } 306 307 private void txtInput_TextChanged(object sender, EventArgs e) 308 { 309 TextValue = txtInput.Text; 310 if (TextChangedEvent != null) 311 { 312 TextChangedEvent(this, null); 313 } 314 } 315 316 private void click_MouseDown(object sender, MouseEventArgs e) 317 { 318 if (_frmAnchor == null || _frmAnchor.IsDisposed || _frmAnchor.Visible == false) 319 { 320 321 if (this.Source != null && this.Source.Count > 0) 322 { 323 int intRow = 0; 324 int intCom = 1; 325 var p = this.PointToScreen(this.Location); 326 while (true) 327 { 328 int intScreenHeight = Screen.PrimaryScreen.Bounds.Height; 329 if ((p.Y + this.Height + this.Source.Count / intCom * 50 < intScreenHeight || p.Y - this.Source.Count / intCom * 50 > 0) 330 && (_dropPanelHeight <= 0 ? true : (this.Source.Count / intCom * 50 <= _dropPanelHeight))) 331 { 332 intRow = this.Source.Count / intCom + (this.Source.Count % intCom != 0 ? 1 : 0); 333 break; 334 } 335 intCom++; 336 } 337 UCTimePanel ucTime = new UCTimePanel(); 338 ucTime.IsShowBorder = true; 339 int intWidth = this.Width / intCom; 340 if (intWidth < _ItemWidth) 341 intWidth = _ItemWidth; 342 Size size = new Size(intCom * intWidth, intRow * 50); 343 ucTime.Size = size; 344 ucTime.FirstEvent = true; 345 ucTime.SelectSourceEvent += ucTime_SelectSourceEvent; 346 ucTime.Row = intRow; 347 ucTime.Column = intCom; 348 List<KeyValuePair<string, string>> lst = new List<KeyValuePair<string, string>>(); 349 foreach (var item in this.Source) 350 { 351 lst.Add(new KeyValuePair<string, string>(item.Key, item.Value)); 352 } 353 ucTime.Source = lst; 354 355 ucTime.SetSelect(_selectedValue); 356 357 _frmAnchor = new Forms.FrmAnchor(this, ucTime); 358 _frmAnchor.Load += (a, b) => { (a as Form).Size = size; }; 359 360 _frmAnchor.Show(this.FindForm()); 361 362 } 363 } 364 else 365 { 366 _frmAnchor.Close(); 367 } 368 } 369 370 371 Forms.FrmAnchor _frmAnchor; 372 void ucTime_SelectSourceEvent(object sender, EventArgs e) 373 { 374 if (_frmAnchor != null && !_frmAnchor.IsDisposed && _frmAnchor.Visible) 375 { 376 SelectedValue = sender.ToString(); 377 _frmAnchor.Close(); 378 } 379 } 380 381 private void UCComboBox_Load(object sender, EventArgs e) 382 { 383 if (this._BoxStyle == ComboBoxStyle.DropDownList) 384 { 385 txtInput.BackColor = _BackColor; 386 base.FillColor = _BackColor; 387 base.RectColor = _BackColor; 388 } 389 else 390 { 391 txtInput.BackColor = Color.White; 392 base.FillColor = Color.White; 393 base.RectColor = Color.FromArgb(220, 220, 220); 394 } 395 } 396 } 397 }
1 namespace HZH_Controls.Controls 2 { 3 partial class UCComboBox 4 { 5 /// <summary> 6 /// 必需的设计器变量。 7 /// </summary> 8 private System.ComponentModel.IContainer components = null; 9 10 /// <summary> 11 /// 清理所有正在使用的资源。 12 /// </summary> 13 /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param> 14 protected override void Dispose(bool disposing) 15 { 16 if (disposing && (components != null)) 17 { 18 components.Dispose(); 19 } 20 base.Dispose(disposing); 21 } 22 23 #region 组件设计器生成的代码 24 25 /// <summary> 26 /// 设计器支持所需的方法 - 不要 27 /// 使用代码编辑器修改此方法的内容。 28 /// </summary> 29 private void InitializeComponent() 30 { 31 this.panel1 = new System.Windows.Forms.Panel(); 32 this.txtInput = new HZH_Controls.Controls.TextBoxEx(); 33 this.lblInput = new System.Windows.Forms.Label(); 34 this.SuspendLayout(); 35 // 36 // panel1 37 // 38 this.panel1.BackColor = System.Drawing.Color.Transparent; 39 this.panel1.BackgroundImage = global::HZH_Controls.Properties.Resources.ComboBox; 40 this.panel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Center; 41 this.panel1.Dock = System.Windows.Forms.DockStyle.Right; 42 this.panel1.Location = new System.Drawing.Point(136, 0); 43 this.panel1.Name = "panel1"; 44 this.panel1.Size = new System.Drawing.Size(37, 32); 45 this.panel1.TabIndex = 0; 46 this.panel1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown); 47 // 48 // txtInput 49 // 50 this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 51 this.txtInput.BackColor = System.Drawing.Color.White; 52 this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.None; 53 this.txtInput.DecLength = 2; 54 this.txtInput.Font = new System.Drawing.Font("微软雅黑", 18F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 55 this.txtInput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); 56 this.txtInput.InputType = TextInputType.NotControl; 57 this.txtInput.Location = new System.Drawing.Point(3, 4); 58 this.txtInput.Margin = new System.Windows.Forms.Padding(3, 3, 10, 3); 59 this.txtInput.MaxValue = new decimal(new int[] { 60 1000000, 61 0, 62 0, 63 0}); 64 this.txtInput.MinValue = new decimal(new int[] { 65 1000000, 66 0, 67 0, 68 -2147483648}); 69 this.txtInput.MyRectangle = new System.Drawing.Rectangle(0, 0, 0, 0); 70 this.txtInput.Name = "txtInput"; 71 this.txtInput.OldText = null; 72 this.txtInput.PromptColor = System.Drawing.Color.Silver; 73 this.txtInput.PromptFont = new System.Drawing.Font("微软雅黑", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Pixel); 74 this.txtInput.PromptText = ""; 75 this.txtInput.RegexPattern = ""; 76 this.txtInput.Size = new System.Drawing.Size(133, 24); 77 this.txtInput.TabIndex = 1; 78 this.txtInput.TextChanged += new System.EventHandler(this.txtInput_TextChanged); 79 // 80 // lblInput 81 // 82 this.lblInput.AutoSize = true; 83 this.lblInput.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); 84 this.lblInput.Location = new System.Drawing.Point(3, 6); 85 this.lblInput.Name = "lblInput"; 86 this.lblInput.Size = new System.Drawing.Size(0, 20); 87 this.lblInput.TabIndex = 2; 88 this.lblInput.Visible = false; 89 this.lblInput.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown); 90 // 91 // UCComboBox 92 // 93 this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; 94 this.BackColor = System.Drawing.Color.Transparent; 95 this.ConerRadius = 5; 96 this.Controls.Add(this.panel1); 97 this.Controls.Add(this.txtInput); 98 this.Controls.Add(this.lblInput); 99 this.FillColor = System.Drawing.Color.Gainsboro; 100 this.IsShowRect = true; 101 this.Name = "UCComboBox"; 102 this.Size = new System.Drawing.Size(173, 32); 103 this.Load += new System.EventHandler(this.UCComboBox_Load); 104 this.SizeChanged += new System.EventHandler(this.UCComboBox_SizeChanged); 105 this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.click_MouseDown); 106 this.ResumeLayout(false); 107 this.PerformLayout(); 108 109 } 110 111 #endregion 112 113 private System.Windows.Forms.Panel panel1; 114 public TextBoxEx txtInput; 115 private System.Windows.Forms.Label lblInput; 116 } 117 }
用处及效果
最后的话
如果你喜欢的话,请到 https://gitee.com/kwwwvagaa/net_winform_custom_control 点个星 星吧