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 日 - 初始发布。