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






4.93/5 (14投票s)
一个 Windows 窗体用户控件,用于将数字显示和编辑为位掩码。
引言
配置硬件通常需要显示和编辑位掩码。修改图形二进制表示通常比在文本框中修改十六进制值更容易。相应的工具提示可以解释每个单独位的含义,并且用户可以更好地了解他/她正在做什么。
我一直想知道为什么我找不到任何可以做这项工作的控件。 这是我作为 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
:如果用户无法更改显示的值,则设置为 truepublic 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 日:初始版本。