如题:程序中有很多个(大约有30个)textbox 文本输入框,都要限制输入,只能输入数字和小数点,有没有一种好方法把下面的keypress过程公有化,写一个公共过程,请文本框直接调用,提高代码重用率。
Private Sub txtDJing_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDJing.KeyPress   '//只能输入数字和小数点
        If (e.KeyChar <> Chr(8) And e.KeyChar <> Chr(13) And Not Char.IsDigit(e.KeyChar) And e.KeyChar <> Chr(46)) Then
            '//8 删除键 13回车 46 小数点 ,小数点只能输入一个              
            e.Handled = True '//禁止输入           
        End If
   End Sub以上其中一个textbox文本输入框的 keypress 事件,还有好几十个啊,难道只能一个一个的Ctrl+C和Ctrl+V吗?能不能把这个键盘事件(或重新写个过程)作为一个公共过程,在每个textbox 的 keypress  事件中调用?
从而达到使用 call mykeypree(txtDjing)就能达到限制输入的目的?
如果能达到这个目的,请问能否给出代码。不胜感谢。

解决方案 »

  1.   

    共享一个处理过程Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    For Each obj As Control In Me.Controls
        If TypeOf (obj) Is TextBox Then      '如果是文本框
            AddHandler obj.KeyPress, AddressOf txtboxKeyPress   '添加事件处理
        End If
    Next
    End Sub
    '你的处理过程
    Private Sub txtboxKeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
        MsgBox(sender.name & "的KeyPress事件")
    End Sub
      

  2.   

    一楼是VB.NET的做法,如果是VB6,则可以使用以下办法:
    一是超类化(注意,不是子类化)。
    二是把文本框封装成一个自定义的数字框控件。
    三是使用一个公共的KeyPress处理过程,比如设置Form的KeyPreview为True,添加一个窗体级控件变量,在文本框的GetFocus事件里将该变量设置为当前的文本框,然后在Form的KeyPress事件处理过程里判断Form的ActiveControl是否等于该变量,如果相等,则过滤字符,示例代码:Dim m_currentTextBox As TextBoxPrivate Sub Form_Initialize()
        Me.KeyPreview = True
    End SubPrivate Sub Form_KeyPress(KeyAscii As Integer)
        If m_currentTextBox Is Me.ActiveControl And IsNumeric(Chr(KeyAscii)) = False And KeyAscii <> 46 Then KeyAscii = 0
    End SubPrivate Sub Text1_GotFocus()
        Set m_currentTextBox = Text1
    End SubPrivate Sub Text2_GotFocus()
    Set m_currentTextBox = Text2
    End Sub
      

  3.   

    所有textbox的keypress都调用下面的过程可以吗?Public Sub mySub(obj As TextBox, KeyAscii As Integer)
    Debug.Print KeyAscii, obj.Name
    '其他过滤
    End Sub