C# IP 地址控件
MFC CIPAddressCtrl 的 C# 类似物
- 下载演示项目 - 34.2 KB
- 下载源代码 - 20.5 KB
- 下载演示项目 [VS05] - 36 KB
- 下载源代码 [VS05] - 20 KB
- 下载演示项目 [VS08] - 36.2 KB
- 下载源代码 [VS08] - 20.2 KB

引言
微软为什么没有在 Visual Studio .NET 的标准工具箱中包含 IP 地址控件?最近我需要在 C# 应用程序中实现类似 MFC CIPAddressCtrl 类功能的控件,因此不得不自己编写。我在这里尝试用 C# 模仿 CIPAddressCtrl 的行为,并希望我成功了。
背景
IPAddressControl 实际上是一个复合 UserControl,它聚合了四个专门的 TextBox 控件(类型为 FieldCtrl)和三个专门的 Control 控件(类型为 DotCtrl)。看图

FieldCtrl 控件在标准 TextBox 功能之外,还进行一些验证和键盘过滤。DotCtrl 控件除了绘制一个点之外,不做其他任何事情。
Using the Code
一旦包含 IPAddressControl 的库(IPAddressControlLib.dll)构建完成,请将其添加到 Visual Studio 的工具箱中。从工具箱中,只需将控件拖到窗体上即可使用。IPAddressControl 的接口非常简单。
公共实例属性
- AutoHeight:- 获取或- 设置一个值,指示控件是否根据当前字体和边框自动垂直调整大小。默认值为- true。
- Blank:- 获取一个值,指示控件中的所有字段是否为空。
- BorderStyle:- 获取或- 设置控件的边框样式。默认值为- BorderStyle.Fixed3D。
- ReadOnly:- 获取或- 设置一个值,指示控件是否为只读。
公共实例方法
- Clear:清除控件的内容。
- GetAddressBytes:返回一个表示字段内容的- byte数组,索引 0 为最左边的字段。
- SetAddressBytes:使用- byte数组- 设置字段的值,索引 0 为最左边的字段。
- SetFieldFocus:将键盘焦点- 设置到控件中的指定字段。
- SetFieldRange:- 设置控件中指定字段的下限和上限范围。
以上属性和方法是 UserControl 标准属性和方法的补充。像 Text、Enabled 和 Font 这样的标准属性,以及 ToString() 这样的标准方法,都能按预期工作。客户端代码可以注册一个对公共事件 FieldChangedEvent 的处理程序,以便在控件字段中的任何文本发生更改时收到通知。
请注意,Text 和 ToString() 可能不会返回相同的值。如果控件中有任何字段为空,Text 将返回一个反映空字段的值。ToString() 会用该字段的 RangeLower 值填充任何空字段。此外,如果使用该控件创建 IPAddress,则可以使用该控件的 GetAddressBytes() 方法轻松完成。
IPAddress ipAddress = new IPAddress( ipAddressControl.GetAddressBytes() );
历史
- 2008 年 4 月 27 日- 添加了 KeyDown、KeyUp和PreviewKeyDown事件的传播。现在Keys.Enter和Keys.Return将传播KeyPress事件。
 
- 添加了 
- 2007 年 10 月 23 日- ReadOnly现在应该是真正只读的了。感谢 t_suzuki 报告此错误。
 
- 2007 年 9 月 27 日- 为焦点、按键和一些鼠标事件添加了正确的事件传播。
- 添加了 AllowInternalTab和AnyBlank属性。
- 移除了多余的代码。
- 移除了计算文本大小时可能存在的资源泄露,并为 SetAddressBytes()添加了null检查。
- 符合 FxCop 1.35。
 
- 2007 年 6 月 13 日- 在设计模式下设置的文本已持久化。
- 移除了对 AutoSize的重写。请改用AutoHeight。
- [VS05] 修改了大小计算以节省水平空间。
 
- 2007 年 3 月 6 日- 现在在解析传入文本时会检查 null。
 
- 现在在解析传入文本时会检查 
- 2007 年 2 月 21 日- 添加了跨字段的 [Backspace] 处理。感谢 Antony 报告此错误。
- 添加了更好的 [Delete] 处理,并新增了 [Home] 和 [End] 的处理器。
- [VS05] 修改了 DotControl的MinimumSize属性以缩小间距。
 
- 2006 年 5 月 5 日- [VS05] 为 ControlDesigner类添加了Baseline到SnapLines集合。使Text属性在设计模式下可浏览。修复了使用大字体时的控件大小调整错误。
 
- [VS05] 为 
- 2005 年 10 月 13 日- 符合 FxCop 1.32。
 
- 2005 年 9 月 17 日- 增强以支持 Windows XP 主题。感谢 Carlos 的请求。
 
- 2005 年 8 月 3 日- Focused属性的错误修复。感谢 Mario 报告此错误。
 
- 2005 年 3 月 22 日- 当任何字段文本更改时,为控件添加了对 OnTextChanged()的调用。感谢 Bertrand 指出这一点。
 
- 当任何字段文本更改时,为控件添加了对 
- 2005 年 2 月 6 日
- 2005 年 1 月 20 日 - 初始发布。




