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

BitmaskCtrl - 以位掩码形式显示和编辑数字

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (14投票s)

2011年5月24日

CPOL

3分钟阅读

viewsIcon

30100

downloadIcon

1094

一个 Windows 窗体用户控件,用于将数字显示和编辑为位掩码。

ScreenShot.gif

引言

配置硬件通常需要显示和编辑位掩码。修改图形二进制表示通常比在文本框中修改十六进制值更容易。相应的工具提示可以解释每个单独位的含义,并且用户可以更好地了解他/她正在做什么。

我一直想知道为什么我找不到任何可以做这项工作的控件。 这是我作为 Windows 窗体用户控件的结果。

1. BitmaskCtrl 演示的作用

演示基本上显示了两个 BitmaskCtrl 实例

  • 左侧的一个只读实例简单地增加其自身的值。
  • 右侧的一个用户可编辑实例,包括一个相应的 PropertyGrid,用于使用 BitMaskCtrl 属性。

2. BitmaskCtrl 只读模式

  • BitmaskCtrl 以一种非常简单的方式显示位。 每个位都显示为编号的矩形。 根据控件的大小,位排列成行和列。 用于设置/未设置位的颜色是可配置的。
  • 这些位总是以大端顺序排列(我认为,以小端顺序排列实际上没有用)。
  • 该控件可调整大小。 它包括一个自动布局功能; 调整演示应用程序的大小来探索这一点。 这使得控件可以垂直方向显示值。
  • 由于 Value 属性的类型为 UInt64,因此支持的最大位数为 64。

3. BitmaskCtrl 编辑模式

  • 该控件支持焦点矩形,该矩形由鼠标移动和左/右键控制。
  • 聚焦的位可以通过鼠标单击或空格键切换。
  • 通过用鼠标拖动控件来完成在单个操作中切换多个位。 通过键盘也可以实现同样的效果(使用 Ctrl/Shift 键和左/右键)。

使用代码

像在您自己的表单中引用任何其他控件一样引用 BitmaskCtrl(如 *BitmaskDemo* 文件中所示)。

以下是公共 BitmaskCtrl 属性的列表

  • public UInt64 Value:获取或设置显示的值
  • public int BitCount:指定要显示的位数(通常这取决于值的数据类型)
  • public bool BitMSBFirst:如果应首先显示最高有效位,则设置为 true
  • public bool BitStartValue:设置为最低有效位索引应显示的任何偏移量(通常为 0 或 1)
  • public bool AutoLayout:设置为 false 以禁用自动布局功能(所有位将排列在一条线上)
  • public bool ReadOnly:如果用户无法更改显示的值,则设置为 true
  • public bool ShowNumbering:如果不需要显示位索引,则设置为 false; 我们中的一些人可能会将此控件用作光色琴 :-)
  • public Color BackColor:指定控件的背景颜色
  • public Color ForeColor:指定要显示的编号文本颜色
  • public Color BitSetColor:指定用于显示设置位的颜色
  • public Color BitNotSetColor:指定用于显示设置位的颜色
  • public int SelectedIndex:提供当前选定的位索引(只读)

以下是公共 BitmaskCtrl 事件的列表

  • public event EventHandler SelectedIndexChanged:选定的索引已更改事件,可用于创建相应的工具提示。 例如
  • void BitmaskCtrl_SelectedIndexChanged(object sender, EventArgs e)
    {
        Console.WriteLine(string.Format("Bit index is {0}"
          , ((BitmaskCtrl)sender).SelectedIndex
          );
    }
  • public event EventHandler ValueChanged:值已更改事件。 例如
  • void BitmaskCtrl_ValueChanged(object sender, EventArgs e)
    {
        Console.WriteLine(string.Format("Value is {0}"
          , ((BitmaskCtrl)sender).Value
          );
    }

可能在 BitmaskCtrl 上进行扩展

  • UInt64 值替换为 .NET 4.0 中的 BigInteger 类可以扩展控件以支持任何大小的值。

关注点

用户控件中的 OnPaint 方法负责绘制控件的完整状态。 目前,使用 LinearGradientBrush 在位矩形上进行着色。

为了在 OnPaint 方法中获得最佳性能,只有在布局更改时才会重新创建 LinearGradientbrush

您可能想要修改绘图代码,请在 BitmaskCtrl.OnPaint(...) 中执行此操作。

历史

  • 2011 年 5 月 24 日:初始版本。
© . All rights reserved.