当前位置:编程学习 > VB >>

vb2005 很多个textbox控件需要限制输入,怎要提高代码重用率

如题:程序中有很多个(大约有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)就能达到限制输入的目的?
如果能达到这个目的,请问能否给出代码。不胜感谢。 --------------------编程问答-------------------- 共享一个处理过程

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
--------------------编程问答-------------------- 一楼是VB.NET的做法,如果是VB6,则可以使用以下办法:
一是超类化(注意,不是子类化)。
二是把文本框封装成一个自定义的数字框控件。
三是使用一个公共的KeyPress处理过程,比如设置Form的KeyPreview为True,添加一个窗体级控件变量,在文本框的GetFocus事件里将该变量设置为当前的文本框,然后在Form的KeyPress事件处理过程里判断Form的ActiveControl是否等于该变量,如果相等,则过滤字符,示例代码:

Dim m_currentTextBox As TextBox

Private Sub Form_Initialize()
    Me.KeyPreview = True
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    If m_currentTextBox Is Me.ActiveControl And IsNumeric(Chr(KeyAscii)) = False And KeyAscii <> 46 Then KeyAscii = 0
End Sub

Private Sub Text1_GotFocus()
    Set m_currentTextBox = Text1
End Sub

Private Sub Text2_GotFocus()
Set m_currentTextBox = Text2
End Sub
--------------------编程问答-------------------- 一楼的做法值得偿试,二楼也不错,给出的思路很好,感谢你们,我去试验一下。谢谢先。 --------------------编程问答-------------------- 所有textbox的keypress都调用下面的过程可以吗?

Public Sub mySub(obj As TextBox, KeyAscii As Integer)
Debug.Print KeyAscii, obj.Name
'其他过滤
End Sub
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,