ColorBorderField.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.ComponentModel; 7 using System.Drawing; 8 using System.Windows.Forms; 9 10 namespace MouseWithoutBorders 11 { 12 public partial class ColorBorderField : UserControl 13 { 14 [Category("Property Changed")] 15 [Description("The text property of the field has changed")] 16 public event EventHandler FieldTextChanged; 17 18 private int _borderSize; 19 20 [Category("Appearance")] 21 [Description("The thickness of the border around the field")] 22 [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 23 public int BorderSize 24 { 25 get => _borderSize; 26 set 27 { 28 _borderSize = value; 29 UpdateFieldSize(); 30 } 31 } 32 33 private Color _borderColor; 34 35 [Category("Appearance")] 36 [Description("The color of the border around the field")] 37 [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 38 public Color BorderColor 39 { 40 get => _borderColor; 41 set 42 { 43 _borderColor = value; 44 UpdateBorderColor(); 45 } 46 } 47 48 private Color _focusColor; 49 50 [Category("Appearance")] 51 [Description("The color of the border around the field when it has focus")] 52 [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 53 public Color FocusColor 54 { 55 get => _focusColor; 56 set 57 { 58 _focusColor = value; 59 UpdateBorderColor(); 60 } 61 } 62 63 [Category("Behavior")] 64 [Description("The maximum number of characters that can be typed in the field")] 65 [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] 66 public int MaximumLength 67 { 68 get => InnerField.MaxLength; 69 set => InnerField.MaxLength = value; 70 } 71 72 [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 73 public override string Text 74 { 75 get => InnerField.Text; 76 set => InnerField.Text = value; 77 } 78 79 public ColorBorderField() 80 { 81 InitializeComponent(); 82 InnerField.GotFocus += InnerFieldGotFocus; 83 InnerField.LostFocus += InnerFieldLostFocus; 84 InnerField.TextChanged += InnerFieldTextChanged; 85 UpdateBorderColor(); 86 } 87 88 protected override void OnResize(EventArgs e) 89 { 90 base.OnResize(e); 91 UpdateFieldSize(); 92 } 93 94 protected override void OnGotFocus(EventArgs e) 95 { 96 base.OnGotFocus(e); 97 _ = InnerField.Focus(); 98 } 99 100 private void InnerFieldGotFocus(object sender, EventArgs e) 101 { 102 BackColor = FocusColor; 103 } 104 105 private void InnerFieldLostFocus(object sender, EventArgs e) 106 { 107 BackColor = BorderColor; 108 } 109 110 private void InnerFieldTextChanged(object sender, EventArgs e) 111 { 112 FieldTextChanged?.Invoke(this, EventArgs.Empty); 113 } 114 115 private void UpdateFieldSize() 116 { 117 InnerField.Left = BorderSize; 118 InnerField.Top = BorderSize; 119 InnerField.Width = Width - (BorderSize * 2); 120 Height = InnerField.Height + (BorderSize * 2); 121 } 122 123 private void UpdateBorderColor() 124 { 125 BackColor = Focused ? FocusColor : BorderColor; 126 } 127 } 128 }