| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2071 人关注过本帖
标题:[求助]关于文本框的输入问题,请教错在哪里?
只看楼主 加入收藏
蓝星海
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-6-18
收藏
 问题点数:0 回复次数:11 
[求助]关于文本框的输入问题,请教错在哪里?

我想让这个文本框只能输入数字,写的代码如下:
Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
Dim ab2, ab5 As Integer
Dim ab4 As String = ""
ab5 = 1
For ab2 = 1 To Len(TextBox1.Text)
Dim i As String = AscW(Mid(TextBox1.Text, ab2, 1))
If i > 47 And i < 58 Then
ab4 = ab4 + Mid(TextBox1.Text, ab5, 1)
ab5 = ab5 + 1
Else
Beep()
End If
ab2 = ab2 + 1
Next
TextBox1.Text = ab4
End Sub
可执行结果是只能输入一个数字,如输入第2个字,也只有第一位数字,并且在第2位输入非数字也不叫了。
好象是循环出问题,不知到底错在哪?
请各位大侠帮忙看下。

搜索更多相关主题的帖子: 文本框 Dim String ByVal Mid 
2007-06-20 21:56
川流不息
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2000
专家分:47
注 册:2006-11-8
收藏
得分:0 

我給個建議,不一定正確,你來試試:
你看能不能在鍵入字符時就做這個限制呢?只需對你當前輸入的那個字符做判斷就行了,行就讓他進,不行就讓他不進。你看能不能做到。


日月更替,天地輪回,人間已是幾回春。 江山不老,人正少年,只手能擎半邊天。
2007-06-21 09:19
蓝星海
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-6-18
收藏
得分:0 
谢谢版主,你说的方法是最好的解决方法.
可是我不知如何写,请教一下要如何写....
2007-06-21 10:32
金凝
Rank: 2
等 级:论坛游民
帖 子:50
专家分:10
注 册:2007-5-19
收藏
得分:0 
好明显哦,i是string类型的,你居然拿string类型的来做比较大小运算

c#.net sql server 2000(开始为2005做准备了)
2007-06-22 10:19
bygg
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:乖乖的心中
等 级:版主
威 望:241
帖 子:13555
专家分:3076
注 册:2006-10-23
收藏
得分:0 
用keyPress事件

飘过~~
2007-06-23 13:08
蓝星海
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-6-18
收藏
得分:0 

能给我讲讲这个事件吗?

我没有找到它的资料........

2007-06-24 14:03
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
收藏
得分:0 
For ab2 = 1 To Len(TextBox1.Text)
Dim i As String = AscW(Mid(TextBox1.Text, ab2, 1))
If i > 47 And i < 58 Then
ab4 = ab4 + Mid(TextBox1.Text, ab5, 1)
ab5 = ab5 + 1
Else
Beep()
End If
ab2 = ab2 + 1 (把这行删掉!)
Next
TextBox1.Text = ab4

For 循环的 Next就是加1,你用代码改变了循环变量的值后,是什么后果呢?

当你输入第2个字的时候 循环开始时 ab2=1, 运行到红色的代码, ab2=2, next 后ab2 =3, for 循环结束!
也就是你的第2个字根本没有被读取出来进行判断也没有累计到ab4上, 当然不会beep , 而且使得输入无效

2007-06-26 10:54
蓝星海
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-6-18
收藏
得分:0 
这也试过啊,也是不行.....郁闷
2007-07-04 15:57
wjt276
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2007-6-6
收藏
得分:0 
回复:(蓝星海)[求助]关于文本框的输入问题,请教错...

我给你一段,


自定义的ValueTextBox控件,它的基本功能:
①、只允许用户输入数字
②、输入的文本会靠右排列,以符合数字的显示惯例
③、用户可以输入负号,当输入负号的位置并非数字的第一码时,自动将负号加在数字的首位
④、可以优化数字,例-000.2优化成-0.2,00045.22优化成45.2
⑤、增加一个公有属性Value,以便设置或返回ValueTextBox中的数值
⑥、当用户输入非负号、数字或是小数点时,自动忽略该输入。

代码者:wjt276
QQ:29248671
E-mail:wjt276@126.com


自定义控件――只接受数字
Public Class ValueTextBox
Inherits System.Windows.Forms.TextBox
#Region " Windows 窗体设计器生成的代码 "
Private mValue As Integer '声明名为mValue和私有字段,以解决秘Text关系。以便访问Value属性值
Private intPiontAsc As Integer
Public Property Value()
Get
mValue = CType(Me.Text, Integer)
Return mValue
End Get
Set(ByVal Value)
mValue = Value
Me.Text = mValue.ToString
End Set
End Property
Private Sub ValueTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
Dim intAscii As Integer
Me.SelectionStart = Me.Text.Length '请输入的数都输入到右边
intAscii = Asc(e.KeyChar) : intPiontAsc = intAscii
Select Case intAscii
Case 48 To 57, 8, 13
'如果输入的是0~9, 退格键或换行键 这是我们允许的按键, 不用做任何事
Case 45
If InStr(Me.Text, "-") <> 0 Then intAscii = 0 ' 如果已经有负号则不允许再输入负号
If Me.SelectionStart <> 0 Then Me.SelectionStart = 0
' 如果负号不是在第一位, 则将负号移至第一位
Case 46
If InStr(Me.Text, ".") <> 0 Then intAscii = 0
Case Else
intAscii = 0
End Select
If intAscii = 0 Then
e.Handled = True ' 如是不合法字元, 则将KeyPressEventArgs的Handled设为True,不用理会
Else
e.Handled = False
End If
End Sub
Private Sub ValueTextBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.TextChanged
Dim string1 As String : Dim string2 As String
If intPiontAsc = 46 Then '对数值型进行优化,如-000.33优化成-0.3,0022.44优化成22.4……
string1 = Me.Text.Substring(0, InStr(Me.Text, ".") - 1) '获取小数点前的所有字符
string2 = CInt(Me.Text.Substring(0, InStr(Me.Text, ".") - 1)) '换成数值型
If string2 = 0 And Me.Text.Substring(0, 1) = "-" Then string2 = "-0"
Me.Text = Me.Text.Replace(string1, string2) '用优化的代替原有的
End If
End Sub
End Class

2007-07-06 21:04
qlong0728
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:272
专家分:0
注 册:2007-6-15
收藏
得分:0 
我是这样写的

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar <> Chr(46) And e.KeyChar <> Chr(8) And e.KeyChar <> Chr(13) And (e.KeyChar < Chr(48) Or e.KeyChar > Chr(57)) Then
Beep()
Beep()
e.KeyChar = Chr(0)
End If
End Sub

如果不要小数点,把CHR(46)去掉就可以,如果要加其它负号等,就在e.KeyChar <> Chr(?)加就可以了

程序人员写程序,又拿程序换酒钱。 奔驰宝马贵者趣,公交自行程序员。 不见满街漂亮妹,哪个归得程序员。
2007-07-11 11:11
快速回复:[求助]关于文本框的输入问题,请教错在哪里?
数据加载中...
 
   



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

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