清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
场景: 做一些网络设备应用时,需要有ip地址的输入,这就需要ip地址输入框控件
思路:
1 重写TextBox 为IpInputBox。
2 重写TextBox为SubIpInputBox
3 一个IpInputBox 添加4个SubIpInputBox 和3个Label
控件图:
具体代码:
主窗口文件 Dialog.cs
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 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace IP { public delegate void FallBackEvent(IpInputBox box, int flag); public partial class Dialog : Form { public Dialog() { InitializeComponent(); } private void Form1_Load( object sender, EventArgs e) { this .Controls.Add(ipBox); ipBox.Location = new Point(10,10); } private IpInputBox ipBox = new IpInputBox( false ); } } |
IpInputBox.cs 文件
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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; namespace IP { public class IpInputBox :TextBox { private bool _isNetmask = false ; public bool IsNetmask { get { return _isNetmask; } set { _isNetmask = value; } } public IpInputBox( bool isNetmask) { _isNetmask = isNetmask; this .Size = new System.Drawing.Size(150, 25); _dotLabel1.Text = "." ; _dotLabel2.Text = "." ; _dotLabel3.Text = "." ; _dotLabel1.Size = new System.Drawing.Size(10, 25); _dotLabel2.Size = new System.Drawing.Size(10, 25); _dotLabel3.Size = new System.Drawing.Size(10, 25); _box1.IsNetmask = _isNetmask; _box2.IsNetmask = _isNetmask; _box3.IsNetmask = _isNetmask; _box4.IsNetmask = _isNetmask; _box1.Flag = 1; _box2.Flag = 2; _box3.Flag = 3; _box4.Flag = 4; this .Controls.Add(_box1); this .Controls.Add(_dotLabel1); this .Controls.Add(_box2); this .Controls.Add(_dotLabel2); this .Controls.Add(_box3); this .Controls.Add(_dotLabel3); this .Controls.Add(_box4); this .Font = new System.Drawing.Font( this .Font.Name, 11); _box1.Location = new System.Drawing.Point(-1, 2); _dotLabel1.Location = new System.Drawing.Point(29, 2); _box2.Location = new System.Drawing.Point(39, 2); _dotLabel2.Location = new System.Drawing.Point(69, 2); _box3.Location = new System.Drawing.Point(79, 2); _dotLabel3.Location = new System.Drawing.Point(109, 2); _box4.Location = new System.Drawing.Point(119, 2); _box1.Box = this ; _box2.Box = this ; _box3.Box = this ; _box4.Box = this ; } public void FallBackEventFun(IpInputBox box, int flag) { switch (flag) { case 1: _box1.Focus(); break ; case 2: _box1.Focus(); break ; case 3: _box2.Focus(); ; break ; case 4: _box3.Focus(); ; break ; } } private string _ipAddress = string .Empty; public void UpDateIpaddress() { try { string [] sArray = ipAddress.Split( new char [] { '.' }); _box1.Text = sArray[0]; _box2.Text = sArray[1]; _box3.Text = sArray[2]; _box4.Text = sArray[3]; } catch (Exception exp) { MessageBox.Show( "更新字符串失败:" + exp.Message); } } /// <summary> /// 获取ip地址 /// </summary> public string IpAddressString { get { string _ipStr1 = _box1.Text; string _ipStr2 = _box2.Text; string _ipStr3 = _box3.Text; string _ipStr4 = _box4.Text; string _ipDotStr = "." ; _ipAddress = _ipStr1 + _ipDotStr + _ipStr2 + _ipDotStr + _ipStr3 + _ipDotStr + _ipStr4; return _ipAddress; } set { _ipAddress = value; } } private string ipAddress = string .Empty; public string IpAddress { get { return ipAddress; } set { ipAddress = value; } } private SubIpInputBox _box1 = new SubIpInputBox( "" ); private SubIpInputBox _box2 = new SubIpInputBox( "" ); private SubIpInputBox _box3 = new SubIpInputBox( "" ); private SubIpInputBox _box4 = new SubIpInputBox( "" ); private Label _dotLabel1 = new Label(); private Label _dotLabel2 = new Label(); private Label _dotLabel3 = new Label(); } } |
SubIpInputBox.cs 文件
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 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Drawing; using System.Windows.Forms; namespace IP { public class SubIpInputBox:TextBox { /// <summary> /// 判断是否是子网掩码,false表示ip地址,true表示子网掩码 /// </summary> private bool _isNetmask = false ; private bool _isSendKey = false ; private System.ComponentModel.IContainer components; private int _flag = 0; public int Flag { get { return _flag; } set { _flag = value; } } /// <summary> /// /// </summary> public event FallBackEvent TextFallBackEvent; //定义事件函数 public void FallBackEventFun( int flag) { if (TextFallBackEvent != null ) { TextFallBackEvent(box, this .Flag); } } public bool IsNetmask { get { return _isNetmask; } set { _isNetmask = value; } } /// <summary> /// 构造函数 /// </summary> public SubIpInputBox( bool isNetmask) { _isNetmask = isNetmask; box = new IpInputBox(_isNetmask); this .Font = new System.Drawing.Font( this .Font.Name, 11); this .BorderStyle = System.Windows.Forms.BorderStyle.None; //去掉边框 this .TextAlign = HorizontalAlignment.Center; //字体居中 this .Size = new System.Drawing.Size(30, 25); this .MaxLength = 3; } public SubIpInputBox( string str) { this .Text = str; this .Size = new System.Drawing.Size(30, 25); this .MaxLength = 3; this .BorderStyle = System.Windows.Forms.BorderStyle.None; //去掉边框 this .TextAlign = HorizontalAlignment.Center; //字体居中 } private IpInputBox box; public IpInputBox Box { get { return box; } set { box = value; } } protected override void OnKeyUp(KeyEventArgs e) { base .OnKeyUp(e); if ( this .Text == "" ) { if (e.KeyCode.ToString() == "Back" ) { this .TextFallBackEvent += new FallBackEvent(box.FallBackEventFun); this .FallBackEventFun( this .Flag); } } } protected override void OnKeyPress(KeyPressEventArgs e) { base .OnKeyPress(e); //阻止从键盘输入键 e.Handled = true ; if ((e.KeyChar >= '0' && e.KeyChar <= '9' ) || (e.KeyChar == ( char )8)) { if ((e.KeyChar == ( char )8)) { e.Handled = false ; return ; } else { int len = this .Text.Length; if (len < 4) { if (len == 0 && e.KeyChar != '0' ) { e.Handled = false ; return ; } else if (len == 0) { if ( this .Flag == 1 && this .IsNetmask == false ) { return ; } } e.Handled = false ; return ; } else { // MessageBox.Show("编号最多只能输入3位数字!"); } } } else if (e.KeyChar == '.' ) { //MessageBox.Show("编号只能输入数字!"); if ( this .Text.Length != 0) { // 如果输入 . 就执行 TAB 键 SendKeys.SendWait( "{TAB}" ); } } else if ( this ._isSendKey) { this .SelectAll(); } } protected override void OnTextChanged(EventArgs e) { try { string currentStr = this .Text; int currentNumber = Convert.ToInt32(currentStr); this .Text = currentNumber.ToString(); this .SelectionStart = currentStr.Length; //设置光标在末尾 if (_isNetmask == false ) //表示ip地址 { if (currentNumber > 223 || (currentNumber == 0 && this .Flag == 1)) { MessageBox.Show( "你输入的" + currentStr + "不是有效数值,请指定一个介于1到223之间的数值!" , "错误" , MessageBoxButtons.OK, MessageBoxIcon.Warning); if ( this .Flag == 1 && currentNumber == 0) { this .Text = "1" ; } else { this .Text = "223" ; } _isSendKey = true ; this .Focus(); this .SelectionStart = currentStr.Length; //设置光标在末尾 this .SelectAll(); } else { if (currentStr.Length == 3 && _isSendKey == false ) { // 当输入的字符个数为3时,跳入另外一个输入框 //MessageBox.Show("输入完毕"); if (currentNumber == 0) { this .Text = "" ; MessageBox.Show( "000" ); } SendKeys.SendWait( "{TAB}" ); } } } else //子网掩码 { if (currentNumber > 255) { MessageBox.Show( "你输入的" + currentStr + "不是有效数值,请指定一个介于0到255之间的数值!" , "错误" , MessageBoxButtons.OK, MessageBoxIcon.Warning); this .Text = "255" ; this .Focus(); this .SelectionStart = currentStr.Length; //设置光标在末尾 this .SelectAll(); } else { if (currentStr.Length == 3 && _isSendKey == false ) { // 当输入的字符个数为3时,跳入另外一个输入框 //MessageBox.Show("输入完毕"); SendKeys.SendWait( "{TAB}" ); } } } } catch { // 异常处理 } } private void InitializeComponent() { this .SuspendLayout(); // // SubIpInputBox // this .TabIndexChanged += new System.EventHandler( this .SubTextBox_TabIndexChanged); this .ResumeLayout( false ); } private void SubTextBox_TabIndexChanged( object sender, EventArgs e) { } } } |
来自:http://blog.csdn.net/taoerit/article/details/42535349