设计思路是将一个Panel中定位4个TextBox,然后在每个输入框中间画上点。另外还要考虑的就是对不同键盘按键的响应。
下面是IP输入框主对象:
以下是地址框中输入框对象:
第一次写控件,多有不正确之处,请大家多多批评指正。
控件dll文件下载: IP地址输入框
下面是IP输入框主对象:
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Drawing;
5
using System.Data;
6
using System.Windows.Forms;
7![](/Images/OutliningIndicators/None.gif)
8
namespace WindowsControlLibrary
9
{
10
/// <summary>
11
/// IPTextBox 的摘要说明。
12
/// </summary>
13
[DefaultProperty("IPV"),DefaultEvent("Resize")]
14
public class IPTextBox : System.Windows.Forms.Panel
15
{
16
/// <summary>
17
/// 必需的设计器变量。
18
/// </summary>
19
private System.ComponentModel.Container components = null;
20
private int sectLen ;
21
private int sectHeight;
22
private int minLen;
23
private IPVersion ipv = IPVersion.IPV4;
24
private IPSection[] IPArray ;
25
private IPSection currentFocused;
26![](/Images/OutliningIndicators/InBlock.gif)
27
private const int firstMin = 1;
28
private const int firstMax = 223;
29
private const int otherMin = 0;
30
private const int otherMax = 255;
31![](/Images/OutliningIndicators/InBlock.gif)
32
public enum IPVersion{IPV4=4,IPV6=8};
33![](/Images/OutliningIndicators/InBlock.gif)
34
public IPTextBox()
35
{
36
// 该调用是 Windows.Forms 窗体设计器所必需的。
37
InitializeComponent();
38
// TODO: 在 InitComponent 调用后添加任何初始化
39
InitStyle();
40
InitControl();
41
42
}
43![](/Images/OutliningIndicators/InBlock.gif)
44
/// <summary>
45
/// 初始化控件样式
46
/// </summary>
47
private void InitStyle()
48
{
49
this.BackColor = Color.White;
50
this.BorderStyle = BorderStyle.Fixed3D;
51
this.Height = 23;
52
this.Width = 100;
53
this.minLen = 30+ (IPSection.GetWidth()+1)*(int)ipv;
54
if (minLen > this.Width)
55
{
56
this.Width = minLen;
57
}
58
this.Resize +=new EventHandler(IPTextBox_Resize);
59
}
60![](/Images/OutliningIndicators/InBlock.gif)
61
/// <summary>
62
/// 初始化子控件
63
/// </summary>
64
private void InitControl()
65
{
66
this.SuspendLayout();
67
this.Controls.Clear();
68![](/Images/OutliningIndicators/InBlock.gif)
69
this.sectHeight = IPSection.GetHeight();
70
this.sectLen = (this.Width-10)/(int)ipv;
71![](/Images/OutliningIndicators/InBlock.gif)
72
//paint input textbox
73
this.IPArray = new IPSection[(int)ipv];
74
Point point ;
75
IPSection section;
76
int index = 5;
77
for (int i=0;i<(int)ipv;i++)
78
{
79
section = new IPSection();
80
section.Name = "section_"+(i+1);
81
IPArray[i] = section;
82
point = new Point((this.sectLen-section.Width)/2+index,(this.Height-section.Height)/2);
83
section.Location = point;
84
this.Controls.Add(section);
85
index += this.sectLen;
86
}
87
this.ResumeLayout(false);
88
}
89![](/Images/OutliningIndicators/InBlock.gif)
90
/// <summary>
91
/// 设置IP版本,IPV4和IPV6,目前还没有处理IPV6的情况
92
/// </summary>
93
[Category("设计"),
94
Editor(typeof(IPVersion),typeof(Enum)),
95
Browsable(true)]
96
public IPVersion IPV
97
{
98
get
99
{
100
return ipv;
101
}
102
set
103
{
104
this.ipv = value;
105
}
106
}
107![](/Images/OutliningIndicators/InBlock.gif)
108
/// <summary>
109
/// 当前焦点所在的输入框
110
/// </summary>
111
internal IPSection CurrentFocus
112
{
113
get
114
{
115
return currentFocused;
116
}
117
set
118
{
119
currentFocused = value;
120
}
121
}
122![](/Images/OutliningIndicators/InBlock.gif)
123
/// <summary>
124
/// 获取IP字串
125
/// </summary>
126
public string IPAddress
127
{
128
get
129
{
130
CompleteIPAddress();
131
string ip = "";
132
for (int i=0;i<IPArray.Length;i++)
133
{
134
ip += IPArray[i].Text+".";
135
}
136
ip = ip.Substring(0,ip.Length-1);
137
return ip;
138
}
139
}
140![](/Images/OutliningIndicators/InBlock.gif)
141
/// <summary>
142
/// 清理所有正在使用的资源。
143
/// </summary>
144
protected override void Dispose( bool disposing )
145
{
146
if( disposing )
147
{
148
if( components != null )
149
components.Dispose();
150
}
151
base.Dispose( disposing );
152
}
153![](/Images/OutliningIndicators/InBlock.gif)
154
#region 组件设计器生成的代码
155
/// <summary>
156
/// 设计器支持所需的方法 - 不要使用代码编辑器
157
/// 修改此方法的内容。
158
/// </summary>
159
private void InitializeComponent()
160
{
161
}
162
#endregion
163![](/Images/OutliningIndicators/InBlock.gif)
164
/// <summary>
165
/// 重写OnPaint事件,执行画点操作
166
/// </summary>
167
/// <param name="pe"></param>
168
protected override void OnPaint(PaintEventArgs pe)
169
{
170
// TODO: 在此添加自定义绘画代码
171![](/Images/OutliningIndicators/InBlock.gif)
172
// 调用基类 OnPaint
173
base.OnPaint(pe);
174
this.Text = "";
175
//paint three dot
176
177
int loc = 5;
178
for (int i=0;i<(int)this.ipv-1;i++)
179
{
180
loc += this.sectLen;
181
pe.Graphics.DrawRectangle(Pens.Black,loc,(this.Height-this.sectHeight)/2+this.sectHeight-5,1,1);
182
}
183
}
184![](/Images/OutliningIndicators/InBlock.gif)
185
/// <summary>
186
/// 响应控件改变大小事件,重画输入框
187
/// </summary>
188
/// <param name="sender"></param>
189
/// <param name="e"></param>
190
internal void IPTextBox_Resize(object sender, System.EventArgs e)
191
{
192
if (minLen > this.Width)
193
{
194
this.Width = minLen;
195
}
196
this.InitControl();
197
}
198![](/Images/OutliningIndicators/InBlock.gif)
199
/// <summary>
200
/// 将焦点跳到下一个输入框
201
/// </summary>
202
internal void GoToNextSection()
203
{
204
if (this.currentFocused == null)
205
{
206
IPArray[0].Focus();
207
return;
208
}
209
for (int i=0;i<IPArray.Length;i++)
210
{
211
if (IPArray[i].Name.Equals(this.currentFocused.Name))
212
{
213
if (i == IPArray.Length -1)
214
{
215
IPArray[i].Focus();
216
}
217
else
218
{
219
IPArray[i+1].Focus();
220
IPArray[i+1].SelectionStart = 0;
221
}
222
break;
223
}
224
}
225
}
226![](/Images/OutliningIndicators/InBlock.gif)
227
/// <summary>
228
/// 将焦点跳到上一个输入框
229
/// </summary>
230
internal void GoToLastSection()
231
{
232
if (this.currentFocused == null)
233
{
234
IPArray[0].Focus();
235
return;
236
}
237
for (int i=0;i<IPArray.Length;i++)
238
{
239
if (IPArray[i].Name.Equals(this.currentFocused.Name))
240
{
241
if (i == 0)
242
{
243
IPArray[i].Focus();
244
IPArray[i].SelectionStart = 0;
245
}
246
else
247
{
248
IPArray[i-1].Focus();
249
IPArray[i-1].SelectionStart = (int)ipv-1;
250
}
251
break;
252
}
253
}
254
}
255![](/Images/OutliningIndicators/InBlock.gif)
256
/// <summary>
257
/// 验证一个输入框的输入情况,并提示
258
/// </summary>
259
/// <param name="sender"></param>
260
/// <returns></returns>
261
public static bool ValidateIPSect(object sender)
262
{
263
string text = ((IPSection)sender).Text;
264
if (text == "") return false;
265
int ip = int.Parse(text);
266
if (((IPSection)sender).Name == ((IPTextBox)((IPSection)sender).Parent).IPArray[0].Name)
267
{
268
if (ip<firstMin || ip>firstMax)
269
{
270
((IPSection)sender).Text = firstMax.ToString();
271
MessageBox.Show("IP地址必须在"+firstMin+"与"+firstMax+"之间");
272
return false;
273
}
274
}
275
else
276
{
277
if (ip<otherMin || ip>otherMax)
278
{
279
((IPSection)sender).Text = otherMax.ToString();
280
MessageBox.Show("IP地址必须在"+otherMin+"与"+otherMax+"之间");
281
return false;
282
}
283
}
284
return true;
285
}
286![](/Images/OutliningIndicators/InBlock.gif)
287
/// <summary>
288
/// 验证控件输入IP地址的有效性
289
/// </summary>
290
public void CompleteIPAddress()
291
{
292
for (int i=0;i<IPArray.Length;i++)
293
{
294
int ip = IPArray[i].Text.Length == 0?-1:int.Parse(IPArray[i].Text);
295
if (i == 0)
296
{
297
if (ip<firstMin)
298
{
299
IPArray[i].Text = firstMin.ToString();
300
}
301
else if (ip>firstMax)
302
{
303
IPArray[i].Text = firstMax.ToString();
304
}
305
}
306
else
307
{
308
if (ip<otherMin)
309
{
310
IPArray[i].Text = otherMin.ToString();
311
}
312
else if (ip>otherMax)
313
{
314
IPArray[i].Text = otherMax.ToString();
315
}
316
}
317
}
318
}
319
}
320
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/InBlock.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/InBlock.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/InBlock.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/InBlock.gif)
86
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
87
![](/Images/OutliningIndicators/InBlock.gif)
88
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
89
![](/Images/OutliningIndicators/InBlock.gif)
90
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
91
![](/Images/OutliningIndicators/InBlock.gif)
92
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/InBlock.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/InBlock.gif)
97
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
121
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
126
![](/Images/OutliningIndicators/InBlock.gif)
127
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
128
![](/Images/OutliningIndicators/InBlock.gif)
129
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/InBlock.gif)
133
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
134
![](/Images/OutliningIndicators/InBlock.gif)
135
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/InBlock.gif)
138
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
139
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/InBlock.gif)
150
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
151
![](/Images/OutliningIndicators/InBlock.gif)
152
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
155
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
161
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
162
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
163
![](/Images/OutliningIndicators/InBlock.gif)
164
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
165
![](/Images/OutliningIndicators/InBlock.gif)
166
![](/Images/OutliningIndicators/InBlock.gif)
167
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
168
![](/Images/OutliningIndicators/InBlock.gif)
169
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
170
![](/Images/OutliningIndicators/InBlock.gif)
171
![](/Images/OutliningIndicators/InBlock.gif)
172
![](/Images/OutliningIndicators/InBlock.gif)
173
![](/Images/OutliningIndicators/InBlock.gif)
174
![](/Images/OutliningIndicators/InBlock.gif)
175
![](/Images/OutliningIndicators/InBlock.gif)
176
![](/Images/OutliningIndicators/InBlock.gif)
177
![](/Images/OutliningIndicators/InBlock.gif)
178
![](/Images/OutliningIndicators/InBlock.gif)
179
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
180
![](/Images/OutliningIndicators/InBlock.gif)
181
![](/Images/OutliningIndicators/InBlock.gif)
182
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
183
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
184
![](/Images/OutliningIndicators/InBlock.gif)
185
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
186
![](/Images/OutliningIndicators/InBlock.gif)
187
![](/Images/OutliningIndicators/InBlock.gif)
188
![](/Images/OutliningIndicators/InBlock.gif)
189
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
190
![](/Images/OutliningIndicators/InBlock.gif)
191
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
192
![](/Images/OutliningIndicators/InBlock.gif)
193
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
194
![](/Images/OutliningIndicators/InBlock.gif)
195
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
196
![](/Images/OutliningIndicators/InBlock.gif)
197
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
198
![](/Images/OutliningIndicators/InBlock.gif)
199
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
200
![](/Images/OutliningIndicators/InBlock.gif)
201
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
202
![](/Images/OutliningIndicators/InBlock.gif)
203
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
204
![](/Images/OutliningIndicators/InBlock.gif)
205
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
206
![](/Images/OutliningIndicators/InBlock.gif)
207
![](/Images/OutliningIndicators/InBlock.gif)
208
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
209
![](/Images/OutliningIndicators/InBlock.gif)
210
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
211
![](/Images/OutliningIndicators/InBlock.gif)
212
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
213
![](/Images/OutliningIndicators/InBlock.gif)
214
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
215
![](/Images/OutliningIndicators/InBlock.gif)
216
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
217
![](/Images/OutliningIndicators/InBlock.gif)
218
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
219
![](/Images/OutliningIndicators/InBlock.gif)
220
![](/Images/OutliningIndicators/InBlock.gif)
221
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
222
![](/Images/OutliningIndicators/InBlock.gif)
223
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
224
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
225
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
226
![](/Images/OutliningIndicators/InBlock.gif)
227
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
228
![](/Images/OutliningIndicators/InBlock.gif)
229
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
230
![](/Images/OutliningIndicators/InBlock.gif)
231
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
232
![](/Images/OutliningIndicators/InBlock.gif)
233
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
234
![](/Images/OutliningIndicators/InBlock.gif)
235
![](/Images/OutliningIndicators/InBlock.gif)
236
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
237
![](/Images/OutliningIndicators/InBlock.gif)
238
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
239
![](/Images/OutliningIndicators/InBlock.gif)
240
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
241
![](/Images/OutliningIndicators/InBlock.gif)
242
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
243
![](/Images/OutliningIndicators/InBlock.gif)
244
![](/Images/OutliningIndicators/InBlock.gif)
245
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
246
![](/Images/OutliningIndicators/InBlock.gif)
247
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
248
![](/Images/OutliningIndicators/InBlock.gif)
249
![](/Images/OutliningIndicators/InBlock.gif)
250
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
251
![](/Images/OutliningIndicators/InBlock.gif)
252
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
253
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
254
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
255
![](/Images/OutliningIndicators/InBlock.gif)
256
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
257
![](/Images/OutliningIndicators/InBlock.gif)
258
![](/Images/OutliningIndicators/InBlock.gif)
259
![](/Images/OutliningIndicators/InBlock.gif)
260
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
261
![](/Images/OutliningIndicators/InBlock.gif)
262
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
263
![](/Images/OutliningIndicators/InBlock.gif)
264
![](/Images/OutliningIndicators/InBlock.gif)
265
![](/Images/OutliningIndicators/InBlock.gif)
266
![](/Images/OutliningIndicators/InBlock.gif)
267
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
268
![](/Images/OutliningIndicators/InBlock.gif)
269
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
270
![](/Images/OutliningIndicators/InBlock.gif)
271
![](/Images/OutliningIndicators/InBlock.gif)
272
![](/Images/OutliningIndicators/InBlock.gif)
273
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
274
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
275
![](/Images/OutliningIndicators/InBlock.gif)
276
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
277
![](/Images/OutliningIndicators/InBlock.gif)
278
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
279
![](/Images/OutliningIndicators/InBlock.gif)
280
![](/Images/OutliningIndicators/InBlock.gif)
281
![](/Images/OutliningIndicators/InBlock.gif)
282
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
283
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
284
![](/Images/OutliningIndicators/InBlock.gif)
285
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
286
![](/Images/OutliningIndicators/InBlock.gif)
287
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
288
![](/Images/OutliningIndicators/InBlock.gif)
289
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
290
![](/Images/OutliningIndicators/InBlock.gif)
291
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
292
![](/Images/OutliningIndicators/InBlock.gif)
293
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
294
![](/Images/OutliningIndicators/InBlock.gif)
295
![](/Images/OutliningIndicators/InBlock.gif)
296
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
297
![](/Images/OutliningIndicators/InBlock.gif)
298
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
299
![](/Images/OutliningIndicators/InBlock.gif)
300
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
301
![](/Images/OutliningIndicators/InBlock.gif)
302
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
303
![](/Images/OutliningIndicators/InBlock.gif)
304
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
305
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
306
![](/Images/OutliningIndicators/InBlock.gif)
307
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
308
![](/Images/OutliningIndicators/InBlock.gif)
309
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
310
![](/Images/OutliningIndicators/InBlock.gif)
311
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
312
![](/Images/OutliningIndicators/InBlock.gif)
313
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
314
![](/Images/OutliningIndicators/InBlock.gif)
315
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
316
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
317
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
318
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
319
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
320
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
以下是地址框中输入框对象:
1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Drawing;
5
using System.Data;
6
using System.Windows.Forms;
7![](/Images/OutliningIndicators/None.gif)
8
namespace WindowsControlLibrary
9
{
10
/// <summary>
11
/// IPSection 的摘要说明。
12
/// </summary>
13
internal sealed class IPSection : System.Windows.Forms.TextBox
14
{
15
/// <summary>
16
/// 必需的设计器变量。
17
/// </summary>
18
private System.ComponentModel.Container components = null;
19
private static int width = 24;
20
private static int height = 21;
21![](/Images/OutliningIndicators/InBlock.gif)
22
internal IPSection()
23
{
24
// 该调用是 Windows.Forms 窗体设计器所必需的。
25
InitializeComponent();
26
InitControl();
27
28
// TODO: 在 InitComponent 调用后添加任何初始化
29
}
30![](/Images/OutliningIndicators/InBlock.gif)
31
/// <summary>
32
/// 初始化控件样式
33
/// </summary>
34
private void InitControl()
35
{
36
this.SuspendLayout();
37
this.BorderStyle = BorderStyle.None;
38
this.Width = 24;
39
this.Height = 21;
40
this.MaxLength = 3;
41
this.ResumeLayout(false);
42
}
43![](/Images/OutliningIndicators/InBlock.gif)
44
/// <summary>
45
/// 清理所有正在使用的资源。
46
/// </summary>
47
protected override void Dispose( bool disposing )
48
{
49
if( disposing )
50
{
51
if( components != null )
52
components.Dispose();
53
}
54
base.Dispose( disposing );
55
}
56![](/Images/OutliningIndicators/InBlock.gif)
57
#region 组件设计器生成的代码
58
/// <summary>
59
/// 设计器支持所需的方法 - 不要使用代码编辑器
60
/// 修改此方法的内容。
61
/// </summary>
62
private void InitializeComponent()
63
{
64
//
65
// IPSection
66
//
67
this.KeyUp += new System.Windows.Forms.KeyEventHandler(this.IPSection_KeyUp);
68
this.Enter += new System.EventHandler(this.IPSection_Enter);
69![](/Images/OutliningIndicators/InBlock.gif)
70
}
71
#endregion
72![](/Images/OutliningIndicators/InBlock.gif)
73
/// <summary>
74
/// 取得控件的默认宽度
75
/// </summary>
76
/// <returns></returns>
77
internal static int GetWidth()
78
{
79
return width;
80
}
81![](/Images/OutliningIndicators/InBlock.gif)
82
/// <summary>
83
/// 取得控件的默认高度
84
/// </summary>
85
/// <returns></returns>
86
internal static int GetHeight()
87
{
88
return height;
89
}
90![](/Images/OutliningIndicators/InBlock.gif)
91
/// <summary>
92
/// 重画控件
93
/// </summary>
94
/// <param name="pe"></param>
95
protected override void OnPaint(PaintEventArgs pe)
96
{
97
// TODO: 在此添加自定义绘画代码
98![](/Images/OutliningIndicators/InBlock.gif)
99
// 调用基类 OnPaint
100
base.OnPaint(pe);
101
}
102![](/Images/OutliningIndicators/InBlock.gif)
103
/// <summary>
104
/// 重写键盘响应事件,对部分键响应
105
/// </summary>
106
/// <param name="e"></param>
107
protected override void OnKeyPress(KeyPressEventArgs e)
108
{
109
//响应键盘事件
110
//LeftArrow 37,UpArrow 38,RightArrow 39,DownArrow 40
111
//Backspace 8
112
//0-9 48-57
113![](/Images/OutliningIndicators/InBlock.gif)
114
base.OnKeyPress(e);
115
int key = e.KeyChar;
116
if (!(key == (char)8 || (key >=(char)37 && key <=(char)40) || (key >=(char)48 && key <=(char)57)))
117
{
118
e.Handled = true;
119
}
120
}
121![](/Images/OutliningIndicators/InBlock.gif)
122
/// <summary>
123
/// 键盘响应事件,根据不同按键做出不同动作
124
/// </summary>
125
/// <param name="sender"></param>
126
/// <param name="e"></param>
127
private void IPSection_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
128
{
129
int key = e.KeyValue;
130
//长度等于3后,先验证有效性,然后跳到下一个输入段
131
if (this.Text.Length == 3)
132
{
133
if (!IPTextBox.ValidateIPSect(this))
134
{
135
this.Focus();
136
return;
137
}
138
((IPTextBox)this.Parent).GoToNextSection();
139
}
140
141
//按键按下"." 方向键右键 方向键下键
142
if (key == 190 || (key ==39 || key == 40) && (this.SelectionStart == this.Text.Length))
143
{
144
((IPTextBox)this.Parent).GoToNextSection();
145
}
146![](/Images/OutliningIndicators/InBlock.gif)
147
//按键按下退格键 方向键左键 方向键上键
148
if ((key == 8 || key ==37 || key == 38) && this.SelectionStart == 0)
149
{
150
((IPTextBox)this.Parent).GoToLastSection();
151
}
152
}
153![](/Images/OutliningIndicators/InBlock.gif)
154
/// <summary>
155
/// 在父控件中注册取得焦点的输入框
156
/// </summary>
157
/// <param name="sender"></param>
158
/// <param name="e"></param>
159
private void IPSection_Enter(object sender, System.EventArgs e)
160
{
161
((IPTextBox)this.Parent).CurrentFocus = this;
162
}
163
}
164
}
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/None.gif)
9
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
10
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
11
![](/Images/OutliningIndicators/InBlock.gif)
12
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
13
![](/Images/OutliningIndicators/InBlock.gif)
14
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
15
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
16
![](/Images/OutliningIndicators/InBlock.gif)
17
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/InBlock.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/InBlock.gif)
23
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/InBlock.gif)
29
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
30
![](/Images/OutliningIndicators/InBlock.gif)
31
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/InBlock.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
43
![](/Images/OutliningIndicators/InBlock.gif)
44
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
45
![](/Images/OutliningIndicators/InBlock.gif)
46
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/InBlock.gif)
53
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
58
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/InBlock.gif)
61
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
62
![](/Images/OutliningIndicators/InBlock.gif)
63
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
64
![](/Images/OutliningIndicators/InBlock.gif)
65
![](/Images/OutliningIndicators/InBlock.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/InBlock.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/InBlock.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
72
![](/Images/OutliningIndicators/InBlock.gif)
73
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
81
![](/Images/OutliningIndicators/InBlock.gif)
82
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
83
![](/Images/OutliningIndicators/InBlock.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/InBlock.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/InBlock.gif)
101
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
102
![](/Images/OutliningIndicators/InBlock.gif)
103
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
104
![](/Images/OutliningIndicators/InBlock.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
107
![](/Images/OutliningIndicators/InBlock.gif)
108
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
109
![](/Images/OutliningIndicators/InBlock.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/InBlock.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/InBlock.gif)
117
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
120
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
121
![](/Images/OutliningIndicators/InBlock.gif)
122
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
123
![](/Images/OutliningIndicators/InBlock.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/InBlock.gif)
126
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
127
![](/Images/OutliningIndicators/InBlock.gif)
128
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
129
![](/Images/OutliningIndicators/InBlock.gif)
130
![](/Images/OutliningIndicators/InBlock.gif)
131
![](/Images/OutliningIndicators/InBlock.gif)
132
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
133
![](/Images/OutliningIndicators/InBlock.gif)
134
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
135
![](/Images/OutliningIndicators/InBlock.gif)
136
![](/Images/OutliningIndicators/InBlock.gif)
137
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
138
![](/Images/OutliningIndicators/InBlock.gif)
139
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
140
![](/Images/OutliningIndicators/InBlock.gif)
141
![](/Images/OutliningIndicators/InBlock.gif)
142
![](/Images/OutliningIndicators/InBlock.gif)
143
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
144
![](/Images/OutliningIndicators/InBlock.gif)
145
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
146
![](/Images/OutliningIndicators/InBlock.gif)
147
![](/Images/OutliningIndicators/InBlock.gif)
148
![](/Images/OutliningIndicators/InBlock.gif)
149
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
150
![](/Images/OutliningIndicators/InBlock.gif)
151
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
152
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
153
![](/Images/OutliningIndicators/InBlock.gif)
154
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
155
![](/Images/OutliningIndicators/InBlock.gif)
156
![](/Images/OutliningIndicators/InBlock.gif)
157
![](/Images/OutliningIndicators/InBlock.gif)
158
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
159
![](/Images/OutliningIndicators/InBlock.gif)
160
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
161
![](/Images/OutliningIndicators/InBlock.gif)
162
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
163
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
164
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
第一次写控件,多有不正确之处,请大家多多批评指正。
控件dll文件下载: IP地址输入框