社区
控件
帖子详情
如何实现Textbox只能“显示”数字
sunshine3110
2008-05-16 04:17:10
功能如题,不但要考虑从键盘键入,还要考虑复制粘贴,鼠标右键粘贴和代码赋值。键盘部分已经实现了,麻烦的是后面。
如果粘贴的字符串只要有一个字母,该字符串就无法粘贴进去,但是也不能影响Textbox里已经存在的字符串。代码赋值也是这样。
语言的话,最好VB
另外如果各位还能考虑到其他情况也欢迎写出来。有分加,不过本人的分数不多...
...全文
239
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)
限制
TextBox
只能
输入
数字
在C#编程中,限制文本框(
TextBox
)
只能
输入
数字
是一项常见的需求,尤其是在涉及数据输入控制、数值计算或用户界面设计的应用程序中。本文将详细探讨如何通过代码
实现
这一功能,帮助初学者和有经验的开发者更好地...
c# winform
textbox
控件
只能
输入
数字
的几种方法
errorProvider1.SetError((Control)sender, "
只能
输入
数字
!"); e.Cancel = true; } else { errorProvider1.SetError((Control)sender, null); } } ``` #### 解析: 1. **正则表达式**:使用正则表达式`^\d+\...
C#
Textbox
只能
输入
数字
代码
以上就是关于"C#
TextBox
只能
输入
数字
"的相关知识点和
实现
方式。开发者可以根据实际需求和项目环境选择最适合的方法。请注意,对于不同的.NET版本和开发环境(如Visual Studio 2010),部分特性可能存在差异。在编写...
C#文本框
TextBox
只有输入
数字
当开发者需要限制用户在文本框中
只能
输入
数字
时,需要进行特定的处理来
实现
这一功能。下面将详细介绍如何使C#的
TextBox
控件
只能
接受
数字
输入。 首先,我们可以使用`KeyPress`事件来监听用户在文本框中的输入。`...
C#案例:限制
TextBox
只能
输入字母
《C#案例:限制
TextBox
只能
输入字母》,就如题目的意思一样,让文本框
只能
输入字母,否则会
显示
提示框。 采用的是通过正则表达式
实现
的: 匹配特定字符串: ^[A-Za-z]+$ //匹配由26个英文字母组成的字符串 ^[A...
控件
1,453
社区成员
41,351
社区内容
发帖
与我相关
我的任务
控件
VB 控件
复制链接
扫一扫
分享
社区描述
VB 控件
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章