在工作过程中,编写了一个组件来支持十进制和十六进制数字的编辑。当在互联网上搜索相关的控件或代码时,意识到几乎没有想要的东西。可能很少有人真的需要以二进制、八进制或十六进制这样的基数输入数字,但无论如何,还是进行了开发。
最初,打算展示开发的工作和代码,但除了代码本身并不长之外,用文章来描述它似乎既乏味又不必过于详细。因此,本文仅展示控件的功能,如果读者感兴趣,他们可以下载源代码或程序集。
这段代码是用Visual Studio 2008 Express Edition编写的,需要.NET Framework 3.5。使用Microsoft的FxCop进行了程序集验证。使用Doxygen生成了代码文档文件。
MultipleBaseNumberEditor是一个Windows Forms组件,它扩展了System.Windows.Forms.UserControl并定义了一个允许以二进制、八进制、十进制或十六进制中的任何一种基数编辑数字的编辑器。要在项目中使用MultipleBaseNumberEditor,可以将源代码MultiBaseNumberEditor.cs添加到解决方案中,或者添加numbersEditors程序集引用。将源代码添加到项目需要先编译项目,然后它才会出现在Visual Studio的工具箱中(在项目标签下)。
也可以将程序集注册到GAC中。为此,请按照此链接中的说明操作:。如果程序集没有注册,尝试将其添加到工具箱时,控件不会出现在.NET Framework组件中。如果不在GAC中注册程序集,要手动将其添加到工具箱,请点击浏览并选择numbersEditors.dll。
要通过“选择工具箱项”手动添加MultipleBaseNumberEditor组件,右键单击工具箱区域并选择“选择项”,然后点击“浏览...”,找到numbersEditors.dll并点击打开。组件将显示在列表中,如图1所示。确保选中了组件,然后点击确定,组件将出现在工具箱中。
将MultipleBaseNumberEditor从工具箱拖放到设计器中的表单上,如图2所示。在属性视图中查看MultipleBaseNumberEditor的属性(图3)。
除了控件的大多数常见属性外,下面列出了MultiBaseNumberEditor特有的属性:
Base是BaseNumber类型。当前定义的基数如下:
public enum BaseNumber {
Binary,
Octet,
Decimal,
Hexadecimal
};
Value是一个无符号的long。该控件不支持负值。Minimum和Maximum定义了Value可以是的值的范围。
使用DisplayBaseChooserButton来显示或隐藏基数选择按钮。有了选择按钮,控件允许用户点击并选择他希望数字显示的基数。
BaseChooserStyle定义了选择按钮的样式。它可以是一个简单的按钮或下拉列表。
public enum BaseChooserStyle {
Button,
Combo
}
ConfigBinary、ConfigOctal、ConfigDecimal和ConfigHexadecimal是针对每个基数的特定设置,允许用户设置控件是否应该显示前缀、后缀以及是否应该用'0'字符填充左侧。
MultipleBaseNumberEditor提供了一个默认的提示,其中打印了当前值的所有可用格式。要打开或关闭该提示,请设置DisplayAllBaseConversions。
除了从UserControl继承的事件外,控件还提供了以下事件:
public event EventHandler ValueChanged;
// 当Value更改时发生
public event EventHandler BaseChanged;
// 当基数数字更改时发生
此程序集符合CLS(有关CLS兼容性的更多信息:)。
此控件扩展了UserControl。它可以扩展TextBox。从TextBox扩展的一个挑战是如何绘制或添加此处添加的其他控件以选择基数(可以是按钮或组合框)。
一个类似的控件可以处理大型字节数组,以选择的任何基数显示组。将此控件扩展到任何基数数字编辑器的可能性(想知道这有什么目的)。增加更多功能的可能性。