标题:今天发现一个问题,文本框限制输入后的问题不知道怎么弄了。大侠帮看看
只看楼主
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:324
专家分:435
注 册:2012-1-29
结帖率:88.24%
已结贴  问题点数:20 回复次数:5 
今天发现一个问题,文本框限制输入后的问题不知道怎么弄了。大侠帮看看
Private Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer)
Const xStr As String = ".0123456789" '把允许输入的内容赋值,引号里的是允许输入的内容
KeyAscii = IIf(InStr(xStr & Chr(8), Chr(KeyAscii)), KeyAscii, 0)
End Sub
用上面的可以做到只允许输入数字和小数点,
问题2点:
1、怎么防止第一位输入的是小数点?
2、怎么防止输入了2个小数点?
另一个问题是:
    怎么禁止输入负数,实际也和第一个问题差不多。
这些分别要用在哪个事件中比较合适。
搜索更多相关主题的帖子: 今天 限制 小数点 文本框 输入 
2020-02-19 10:33
wufuzhang
Rank: 9Rank: 9Rank: 9
来 自:广州
等 级:贵宾
威 望:21
帖 子:206
专家分:1346
注 册:2017-8-9
得分:14 
回复 楼主 wxflw
程序代码:
Private dot_flag As Byte

Private Sub Text1_KeyPress(KeyAscii As Integer)
  Dim str
  str = Text1
  If Len(str) = 0 Then ''第一次输入
     If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
  Else
     If dot_flag = 0 Then
        If KeyAscii = 46 Then dot_flag = 1
        If KeyAscii <> 46 And (KeyAscii < 48 Or KeyAscii > 57) Then KeyAscii = 0
     Else
        If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0
     End If
  End If
End Sub

不经历千百遍的调试,怎能体会成功时那一刹那的喜悦。
2020-02-19 14:45
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:324
专家分:435
注 册:2012-1-29
得分:0 
回复 2楼 wufuzhang
你的方法不是我需要的,我自己也弄了一个供大家参考:
我的文本框里只允许了输入(0123456789.),第一个字符不允许为小数点,数据中不允许有第二个小数点。
Private Sub Text2_KeyPress(Index As Integer, KeyAscii As Integer)
If Text2(Index).Text = "" Then '--没有数据
   'If KeyAscii = 45 Then KeyAscii = 0 '------加入这一句可以避免第一个字符输入负号,一次类推
    If KeyAscii = 46 Then KeyAscii = KeyAscii + 2 '--没有数据情况下按下了小数点,那么把小数点改为数字0
Else
   If InStr(Text2(Index), ".") > 0 Then '判断有小数点
      If KeyAscii = 46 Then KeyAscii = 0 '----如果已经有小数点了,按键设为空
   End If
End If
'==========下面是允许输入的字符
Const xStr As String = ".0123456789" '先声明一个常量,并把允许输入的内容赋值给它
KeyAscii = IIf(InStr(xStr & Chr(8), Chr(KeyAscii)), KeyAscii, 0)
End Sub

学习--------------学习-------------------学习--------------------!!
2020-02-21 14:53
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
Private Sub Text1_KeyPress(KeyAscii As Integer)
  Dim a As String
  a = ".0123456789" & Chr(8) & Chr(13)
  If InStr(a, Chr(KeyAscii)) = 0 Or (KeyAscii = Asc(".") And (Text1 = "" Or InStr(Text1, ".") > 0)) Then KeyAscii = 0
End Sub

能编个毛线衣吗?
2020-02-21 15:47
wxflw
Rank: 6Rank: 6
等 级:侠之大者
帖 子:324
专家分:435
注 册:2012-1-29
得分:0 
回复 4楼 wmf2014
这个比我自己研究的简洁好多了,我虽然也简化了点,但是相差还是太多。现在在研究怎么将:0000.0前面的0整合起来..

[此贴子已经被作者于2020-3-2 14:30编辑过]


学习--------------学习-------------------学习--------------------!!
2020-03-02 14:28
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
  Dim a As String,i as integer
  for i=1 to len(a)
    if mid(a,i,1)<>"0" then exit for  '消前导0
  next
  a= Right(a, Len(a) + 1 - i)
  if a="" or left(a,1)="." then a="0" & a

能编个毛线衣吗?
2020-03-02 18:58



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499297-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.174308 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved