054自定义控件之创建一个仅输入数值的文本框
创建一个仅允许用户输入数字项的文本框。该类的父类为标准的Windows窗体文本框,允许输入任何字符。新创建的控件将具有附加的逻辑,用于仅允许输入数字字符。
控件的基本要求为:
- 允许输入数字
- 仅允许输入一个小数点
- 允许输入一个减号,但是仅允许放在文本框的首位
- 丢弃或忽略输入的所有其他字符
(1)创建一个新的‘‘Windows控件库”项目,并将它命名为NumbericTextBox,重命名类文件名为NumbericTextBox.vb(默认情况下被命名为UserControll.vb。
(2)修改该类的代码,使之继承于TextBox控件。
Public Class NumbericTextBox
Inherits System.Windows.Forms.TextBox
(3)接下来需要为类添加新功能代码。新控件类仅用于排除不想处理的键,在代码中放置KeyPress事件的处理程序,也就是为NumbericTextBox控件添加KeyPress事件处理程序。具体步骤为:打开代码窗口中的左侧下拉列表框,选择“NumbericTextBox事件“
选项,然后在代码窗口右侧的下拉列表框中选择KeyPress事件。
Private Sub NumbericTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
Dim KeyAscii As Integer
KeyAscii = Asc(e.KeyChar)
Select Case KeyAscii
Case 48 To 57, 8, 13 '数字0~9和空格的ASCII码值
Case 45 '减号的ASCII码,由于文本框只能接收一个负号,如果已经存在一个,则抛出它
If InStr(Me.Text, "-") Then
KeyAscii = 0
End If
If Me.SelectionStart <> 0 Then '如果负号不在开始位置,则抛出
KeyAscii = 0
End If
Case 46 '小数点的ASCII码,如果文本框中已存在小数点,则抛出
If InStr(Me.Text, ".") Then
KeyAscii = 0
End If
Case Else '过滤掉其他字符
KeyAscii = 0
End Select
If KeyAscii = 0 Then
e.Handled = True
Else
e.Handled = False
End If
End Sub
(4)生成包含NumbericTextIBox控件的DLI文件。
(5)创建一个新的“Windows应用程序”项目来测试控件。在新建的测试应用程序中,右击工具箱中的“所有Windows窗体”标签,从弹出的快捷菜单中选择“选择项”命令,然后单击“.NET Framework组件’’标签。单击“浏览”按钮,并定位到NumbericTextBox项目的目录,以便选择NumbericTextBox.dll文件。
(6)在“所有Windows窗体”选项卡的底部找到NumbericTextBox控件。像使用标准文本框一样,将NumbericTextBox控件添加到窗体上。启动项目,测试NumberTextBox,验证是否仅接收数值。
在创建新的项目测试NumbericTextBox时,添加自定义控件将导致在项目的目录中复制NumbericTextBox.dll文件,对于运行应用程序而言这是必需的。但是,如果在自定义控件中改变了逻辑处理,建立了它的新版本,新版本不会自动提供给用于测试该控件的项目。这时就必须从工具箱中删除该控件,然后重新引用控件的新版本。
将控件卸载并重新加载到工具箱中的过程很繁琐,而且容易被忘记。有一种更好,更简单的方法,即在创建控件的项目中添加新的Windows应用程序项目,然后,当建立控件的新版本时,项目中的Windows测试应用程序会自动使用新版本。
在将一个新的Windows应用程序添加到解决方案中,用于测试自定义控件,还需要执行一个步骤。必须在解决方案属性中将Windows应用程序项目设置为启动项目。否则。默认启动项目为控件项目。
上一篇: Adroid相关问题收集