假如一个Form中有20个TextBox,我还需要写20个地方的判断啊。而且我想让TextBox只响应"0"-"9", "."的按键用用户控件可以解决吗?呵呵,但是还不了解User Control...Faint

解决方案 »

  1.   

    最好用TextBox数组,这样一个窗体上的所有TextBox就只有一个KeyPress事件,用Select Case 语句去掉那些不需要检测输入的TextBox就好,就更完美了
      

  2.   

    re siyuan 79:
    假如可以更简单而且更有效的办法你喜欢选择哪个?
    虽然实现的功能的可以一样但是我喜欢简单的。re x_bigman:
    TextBox数组我用过,但是好像还不是最简单的?(无概念性)
    我想最好是能用User Control解决
      

  3.   

    草胚子的方法不错,如果还不满意你只好自己写个控件,控件里只包含一个你写好捕捉keypress的TextBox,然后用你自己的控件代替textbox
      

  4.   

    用什么User Control,你还不如用MaskEdBox,干什么用TextBox。
    MaskEdBox1.Mask="#########".
      

  5.   

    x_bigman(草胚子):
      这样可能不太好,MaskEdBox如果用了Mask好像是要限制输入长度的
      

  6.   

    你到底想干啥,如果需要大量的文本框输入,那么我还是建议用TextBox加KeyPress的用法,这样系统开销会小些,MaskEdBox归根到底还是基于TextBox的。少用些这些控件多用基本控件可以使你的程序更稳定些,OK。我决定不再回答你这个问题了。加不加分随你。
      

  7.   

    而且无法输入小数点,除非你
    Mask="###########.##"
      

  8.   

    re x_bigman:老大别生气,程序中数据量输入及其大。
    所以偶想找一个最简单的解决办法,用TextBox Array + KeyPress
    Copy一下还是很快的,但是我总以为可以还有更简单的办法的。别生气啊。
      

  9.   

    用掩码控件,MSMASK32。OCX 可以固定输入数字需设置MASK属性
      

  10.   

    全部输完以后再Check不行吗?
    用Isnumeric(Text)就可以判断了
    或者你自己做一个控件,也很简单的,然后把所有的只能输入数字的Text控件换成你的控件
      

  11.   

    你可以将些内容写成一个函数。
    Private Sub GetKeyPress(KeyAscii As Integer)
    Dim bolT As Boolean
      KeyAscii = Asc(UCase$(Chr$(KeyAscii)))
      If KeyAscii = Asc(".") Then
             Text1.Locked = False
      ElseIf KeyAscii = 8 Then  '该键为Back Space,为了删除
             Text1.Locked = False
      ElseIf KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then
             Text1.Locked = False
      Else
             Text1.Locked = True
      End If
    End Sub到时侯可以随时调用Private Sub Text1_KeyPress(KeyAscii As Integer)
        GetKeyPress KeyAscii
    End Sub
      

  12.   

    这是一个很优化的方案,你想想你就算用User Control,也不是达到这样的目的。同时如果
    你又想只让他输入字母,或在一定位置输入数字,一定位置输入字母,是不是又要改User 
    Control,是不是每种情况你都要编一个User Control。这样是把程序搞复杂还是简单了。
    你还想不想让人看懂你的程序。
      

  13.   

    我个人是这样认为的:
    全部在User Control写完以后,调用会是很简单的
    比如以后还需要用到的话,是很简单就可以用的。刚毕业,脑袋里奇怪的想法多得很。总之,以后还请大家多多帮忙。
      

  14.   

    Public Sub CheckKeyPress(TargetTextBox As TextBox, KeyAscii As Integer, Optional DecimalCount As Integer = 2)    KeyAscii = Asc(UCase$(Chr$(KeyAscii)))
        
        If KeyAscii = Asc("-") And TargetTextBox.SelStart = 0 Then
            TargetTextBox.Locked = False
        ElseIf KeyAscii = Asc(".") And InStr(TargetTextBox.Text, ".") = 0 Then
            TargetTextBox.Locked = False
        ElseIf KeyAscii = 8 Then
            TargetTextBox.Locked = False
        ElseIf KeyAscii >= Asc("0") And KeyAscii <= Asc("9") And _
            ((InStr(TargetTextBox.Text, ".") > 0 And _
            (Len(TargetTextBox.Text) - InStr(TargetTextBox.Text, ".")) < DecimalCount) Or _
            InStr(TargetTextBox.Text, ".") = 0) Then
                TargetTextBox.Locked = False
        Else
            TargetTextBox.Locked = True
        End If
    End Sub
    优化一下,呵呵