65.9K
CodeProject 正在变化。 阅读更多。
Home

C# IP 地址控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (96投票s)

2005年1月20日

MIT

4分钟阅读

viewsIcon

822743

downloadIcon

40154

MFC CIPAddressCtrl 的 C# 类似物

Screenshot - TestIPAddressControl.png

引言

微软为什么没有在 Visual Studio .NET 的标准工具箱中包含 IP 地址控件?最近我需要在 C# 应用程序中实现类似 MFC CIPAddressCtrl 类功能的控件,因此不得不自己编写。我在这里尝试用 C# 模仿 CIPAddressCtrl 的行为,并希望我成功了。

背景

IPAddressControl 实际上是一个复合 UserControl,它聚合了四个专门的 TextBox 控件(类型为 FieldCtrl)和三个专门的 Control 控件(类型为 DotCtrl)。看图

Screenshot - close_up.gif

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 标准属性和方法的补充。像 TextEnabledFont 这样的标准属性,以及 ToString() 这样的标准方法,都能按预期工作。客户端代码可以注册一个对公共事件 FieldChangedEvent 的处理程序,以便在控件字段中的任何文本发生更改时收到通知。

请注意,TextToString() 可能不会返回相同的值。如果控件中有任何字段为空,Text 将返回一个反映空字段的值。ToString() 会用该字段的 RangeLower 值填充任何空字段。此外,如果使用该控件创建 IPAddress,则可以使用该控件的 GetAddressBytes() 方法轻松完成。

IPAddress ipAddress = new IPAddress( ipAddressControl.GetAddressBytes() );

历史

  • 2008 年 4 月 27 日
    • 添加了 KeyDownKeyUpPreviewKeyDown 事件的传播。现在 Keys.EnterKeys.Return 将传播 KeyPress 事件。
  • 2007 年 10 月 23 日
    • ReadOnly 现在应该是真正只读的了。感谢 t_suzuki 报告此错误。
  • 2007 年 9 月 27 日
    • 为焦点、按键和一些鼠标事件添加了正确的事件传播。
    • 添加了 AllowInternalTabAnyBlank 属性。
    • 移除了多余的代码。
    • 移除了计算文本大小时可能存在的资源泄露,并为 SetAddressBytes() 添加了 null 检查。
    • 符合 FxCop 1.35。
  • 2007 年 6 月 13 日
    • 在设计模式下设置的文本已持久化。
    • 移除了对 AutoSize 的重写。请改用 AutoHeight
    • [VS05] 修改了大小计算以节省水平空间。
  • 2007 年 3 月 6 日
    • 现在在解析传入文本时会检查 null
  • 2007 年 2 月 21 日
    • 添加了跨字段的 [Backspace] 处理。感谢 Antony 报告此错误。
    • 添加了更好的 [Delete] 处理,并新增了 [Home] 和 [End] 的处理器。
    • [VS05] 修改了 DotControlMinimumSize 属性以缩小间距。
  • 2006 年 5 月 5 日
    • [VS05] 为 ControlDesigner 类添加了 BaselineSnapLines 集合。使 Text 属性在设计模式下可浏览。修复了使用大字体时的控件大小调整错误。
  • 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 日
    • 添加了缺失的按键处理器。感谢 NormEd 对缺失按键处理器的提示。
    • 添加了大小调整。
    • 添加了 ReadOnly 属性。
    • 非标准的颜色选择现在可以正确渲染。
    • 添加了一个事件来通知客户端文本更改。
  • 2005 年 1 月 20 日 - 初始发布。
© . All rights reserved.