社区
控件
帖子详情
如何实现Textbox只能“显示”数字
sunshine3110
2008-05-16 04:17:10
功能如题,不但要考虑从键盘键入,还要考虑复制粘贴,鼠标右键粘贴和代码赋值。键盘部分已经实现了,麻烦的是后面。
如果粘贴的字符串只要有一个字母,该字符串就无法粘贴进去,但是也不能影响Textbox里已经存在的字符串。代码赋值也是这样。
语言的话,最好VB
另外如果各位还能考虑到其他情况也欢迎写出来。有分加,不过本人的分数不多...
...全文
210
23
打赏
收藏
如何实现Textbox只能“显示”数字
功能如题,不但要考虑从键盘键入,还要考虑复制粘贴,鼠标右键粘贴和代码赋值。键盘部分已经实现了,麻烦的是后面。 如果粘贴的字符串只要有一个字母,该字符串就无法粘贴进去,但是也不能影响Textbox里已经存在的字符串。代码赋值也是这样。 语言的话,最好VB 另外如果各位还能考虑到其他情况也欢迎写出来。有分加,不过本人的分数不多...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sunshine3110
2008-05-27
打赏
举报
回复
謝謝大家的幫助,問題已經解決了。
這么久沒有結貼真是不好意思。
of123
2008-05-16
打赏
举报
回复
这样更好一些,其它字符也进不来。
Private Sub Text1_Change()
Dim p As Integer
p = Text1.SelStart
If Text1 Like "*[!.0-9]*" Then
Text1 = Text1.Tag
Text1.SelStart = p
Else
Text1.Tag = Text1
End If
End Sub
of123
2008-05-16
打赏
举报
回复
如果允许使用 Change 事件(没有闪动),应该是非常简单的。
Private Sub Text1_Change()
Dim p As Integer
p = Text1.SelStart
If Text1 Like "*[A-Za-z]*" Then
Text1 = Text1.Tag
Text1.SelStart = p
Else
Text1.Tag = Text1
End If
End Sub
tanjiunnya
2008-05-16
打赏
举报
回复
[Quote=引用 19 楼 sunshine3110 的回复:]
还是不对啊……,已经明确了不能在changed事件里面了,怪我表达不清楚。不好意思
根本的思路是,获得即将要写入的字符串,如果不是数字就不让写入,就是代码不知道怎么实现了。
[/Quote]
13楼给你的思路,就是我给你的代码范例。
如果是写入的,你就用KeyPress, KeyDown 来捕抓吧。
sunshine3110
2008-05-16
打赏
举报
回复
还是不对啊……,已经明确了不能在changed事件里面了,怪我表达不清楚。不好意思
根本的思路是,获得即将要写入的字符串,如果不是数字就不让写入,就是代码不知道怎么实现了。
tanjiunnya
2008-05-16
打赏
举报
回复
刚才笔误了,把楼上的 Test1_Change() 更正为 Text1_Change()
tanjiunnya
2008-05-16
打赏
举报
回复
[Quote=引用 15 楼 sunshine3110 的回复:]
引用 13 楼 myjian 的回复:
他爱输入什么输入什么,在使用数据的时候判断一下就行了,IsNumeric(),不合格的输入就让他重新输入
//
顶顶这个思路.
这是在关键路口设关卡.
这确实是我要的思路
可否给一些事例代码,因为我的经验还不是很深,谢谢。
[/Quote]
Private Sub Test1_Change()
If IsNumeric(Text1) Then
'是数字,允许通过
:
:
Else
'不是数字,显示错误信息
MsgBox "输入错误,请输入正确的数字!"
Text1.SetFocus
Text1.SelStart = 0
Text1.SelLength = Len(Text1)
End If
End Sub
Michael_Zang
2008-05-16
打赏
举报
回复
我也关注
sunshine3110
2008-05-16
打赏
举报
回复
[Quote=引用 13 楼 myjian 的回复:]
他爱输入什么输入什么,在使用数据的时候判断一下就行了,IsNumeric(),不合格的输入就让他重新输入
//
顶顶这个思路.
这是在关键路口设关卡.
[/Quote]
这确实是我要的思路
可否给一些事例代码,因为我的经验还不是很深,谢谢。
sunshine3110
2008-05-16
打赏
举报
回复
[Quote=引用 12 楼 Tiger_Zhao 的回复:]
如果原先是 "1",再粘贴加上 "23 ",你期望结果是什么?
如果通过 Change 中过滤,结果是 "123",一样是合法的。
[/Quote]
不错的想法,
这种情况就是直接衔接的关系,没有运算,和字符串一样,光标停在哪里就插到哪里。
嗷嗷叫的老马
2008-05-16
打赏
举报
回复
[Quote=引用 11 楼 dbcontrols 的回复:]
你的思路不对
他爱输入什么输入什么,在使用数据的时候判断一下就行了,IsNumeric(),不合格的输入就让他重新输入
引用 2 楼 sunshine3110 的回复:
判断是比较容易,但是处理就不容易了
[/Quote]
//
顶顶这个思路.
这是在关键路口设关卡.
Tiger_Zhao
2008-05-16
打赏
举报
回复
如果原先是 "1",再粘贴加上 "23 ",你期望结果是什么?
如果通过 Change 中过滤,结果是 "123",一样是合法的。
dbcontrols
2008-05-16
打赏
举报
回复
你的思路不对
他爱输入什么输入什么,在使用数据的时候判断一下就行了,IsNumeric(),不合格的输入就让他重新输入
[Quote=引用 2 楼 sunshine3110 的回复:]
判断是比较容易,但是处理就不容易了
[/Quote]
sunshine3110
2008-05-16
打赏
举报
回复
[Quote=引用 9 楼 Tiger_Zhao 的回复:]
因为用户一次只能操作一个控件,单个控件的闪烁是看不出来的。
变换前的文本根本不用关心,只要保证变换后始终是合法的就可以了。
[/Quote]
应该还是要的,因为不能影响原先已经在里面的文本,而changed事件文本已经改变了。
我觉得7楼的myjian 思路对头,现在的关键问题就是获取要写入的值,符合要求的进来,不符合的出去,这是最好的。
就是代码不知道写在那里,该怎么写了……
Tiger_Zhao
2008-05-16
打赏
举报
回复
[Quote=引用 6 楼 sunshine3110 的回复:]
其实……这个也不太符合要求,因为在变换以后再做处理有可能出现文字闪一下的情况。
而且如何获取变换之前的文本呢?
[/Quote]
因为用户一次只能操作一个控件,单个控件的闪烁是看不出来的。
变换前的文本根本不用关心,只要保证变换后始终是合法的就可以了。
tanjiunnya
2008-05-16
打赏
举报
回复
[Quote=引用 4 楼 sunshine3110 的回复:]
引用 1 楼 tanjiunnya 的回复:
在keypress / keydown 用keycode / ascii code做判断
也可以用 IsNumeric()来判断。
首先谢谢你的回答,不过这只是对键盘的判断,还有复制粘贴和鼠标右键粘贴以及直接赋值该如何处理,
[/Quote]
嗯。粘贴的过程可以通过Change来进行判断。
嗷嗷叫的老马
2008-05-16
打赏
举报
回复
[Quote=引用楼主 sunshine3110 的帖子:]
如果粘贴的字符串只要有一个字母,该字符串就无法粘贴进去,但是也不能影响Textbox里已经存在的字符串。代码赋值也是这样。
[/Quote]
给你思路:
子类化拦截粘贴消息已经做到了.
只需要在这个消息到来时对当前剪贴板内容做一次过滤即可.
至于"代码赋值也是这样",为什么不使用一个预处理函数先处理好要准备赋值的内容呢?
要靠一个控件这样来限制,你那个软件也应该重写了.
sunshine3110
2008-05-16
打赏
举报
回复
[Quote=引用 3 楼 Tiger_Zhao 的回复:]
在 Change 事件中将不合法的字符删除,注意根据删除的位置调整 SelStart、SelLength 属性
[/Quote]
其实……这个也不太符合要求,因为在变换以后再做处理有可能出现文字闪一下的情况。
而且如何获取变换之前的文本呢?
嗷嗷叫的老马
2008-05-16
打赏
举报
回复
参考以下帖子:
http://topic.csdn.net/u/20070815/17/f1c68367-7fe3-42ef-ab8f-00f07525908e.html
http://topic.csdn.net/u/20070723/17/fcb3dcf0-eb5c-4144-b6e9-bf33fc86097f.html
我使用的关键字:
http://www.google.cn/search?hl=zh-CN&q=%E6%96%87%E6%9C%AC%E6%A1%86+%E5%8F%AA%E8%83%BD%E8%BE%93%E5%85%A5%E6%95%B0%E5%AD%97+%E5%97%B7%E5%97%B7%E5%8F%AB%E7%9A%84%E8%80%81%E9%A9%AC&meta=&aq=f
sunshine3110
2008-05-16
打赏
举报
回复
[Quote=引用 1 楼 tanjiunnya 的回复:]
在keypress / keydown 用keycode / ascii code做判断
也可以用 IsNumeric()来判断。
[/Quote]
首先谢谢你的回答,不过这只是对键盘的判断,还有复制粘贴和鼠标右键粘贴以及直接赋值该如何处理,
加载更多回复(3)
C#案例:限制
TextBox
只能
输入字母
《C#案例:限制
TextBox
只能
输入字母》,就如题目的意思一样,让文本框
只能
输入字母,否则会
显示
提示框。 采用的是通过正则表达式
实现
的: 匹配特定字符串: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A...
vs2008货币控件,
实现
自动将文本框内容调整为货币格式
visual2008下货币输入,有
textbox
不方便,即使用Mask
textbox
也不方便,
只能
实现
简单控件格式,不能像自动根据输入的
数字
转化为货币格式。
GridView(For Asp.net C# vs2005)控件
最近在使用ASP.net 2.0的GridView 控件时,发现排序与分页功能Microsoft
实现
的都很简单,比如排序,在点击列名的时候来触发整页的PostBack,然后排序,但是在列头上没有一个
显示
升序降序的图标,这会让最终用户使用...
Mindsware DataObjects & DynamicDataSheet Framework
是否可为空、是否参照其他表的主键、编辑时
显示
类型(
显示
为
textbox
, textarea, dropdownlist, radiolist还是别的什么)等等信息。那么自动可以使用基类已经 定义好的RetreiveList, Count等
显示
列表、处理查询的方法...
c# 加密和解密相关代码
在第一个GroupBox 中放入3 个
TextBox
控件和一个Button 按钮,分别用于输入
数字
、输入加密
数字
、
显示
加 密后的
数字
和计算加密信息;在第二个GroupBox 中放入一个
TextBox
控件和一个Button 按钮,分别用于
显示
解密后...
控件
1,451
社区成员
41,355
社区内容
发帖
与我相关
我的任务
控件
VB 控件
复制链接
扫一扫
分享
社区描述
VB 控件
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章