欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

054自定义控件之创建一个仅输入数值的文本框

程序员文章站 2022-06-08 23:46:38
...

      创建一个仅允许用户输入数字项的文本框。该类的父类为标准的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应用程序项目设置为启动项目。否则。默认启动项目为控件项目。