1000分送上!如何通过子类化,限制文本框的输入长度(中英文混合)

iamluodong 2004-07-29 02:02:17
如何通过子类化,限制文本框的输入长度(中英文混合)
很急,谢谢
...全文
223 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rainstormmaster 2004-07-29
  • 打赏
  • 举报
回复
//em_setlimittext我为什么查不到啊常量多少啊

其实就是EM_LIMITTEXT消息,只是微软换了个名字而已
of123 2004-07-29
  • 打赏
  • 举报
回复
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Const EM_LIMITTEXT = &HC5

Private Sub Form_Load()
Const Max_Char = 100
Call SendMessage(Text1.hWnd, EM_LIMITTEXT, Max_Char, 0&)
End Sub

限制的就是字节数。
iamluodong 2004-07-29
  • 打赏
  • 举报
回复
em_setlimittext我为什么查不到啊常量多少啊
efengxu 2004-07-29
  • 打赏
  • 举报
回复
用maxLength挺好的嘛,干吗搞那么多啊,烦死了!
LGYAN 2004-07-29
  • 打赏
  • 举报
回复
解决方法:
Private Sub Text1_Change()
Const DefineLength = 6 '你允许录入的长度。
If LenB(StrConv(Text1.Text, vbFromUnicode)) > DefineLength Then
Text1.Text = Left(Text1.Text, Len(Text1.Text) - 1)
Text1.SelStart = Len(Text1.Text)
End If
End Sub
rainstormmaster 2004-07-29
  • 打赏
  • 举报
回复
//发送em_setlimittext消息也有这样的问题,wparm你设置成多少啊

不用担心,em_setlimittext是针对字节的
iamluodong 2004-07-29
  • 打赏
  • 举报
回复
vb的maxlength是针对字的设置,我希望它能检测出字和字节的累积长度
我输入:人123-->它的混合长度是lenb((strconv("人123"),vbFromUnicode))=5
你们说我的maxlength设置成多少
另:发送em_setlimittext消息也有这样的问题,wparm你设置成多少啊
iamluodong 2004-07-29
  • 打赏
  • 举报
回复
EM_SETLIMITTEXT是针对字节的吗?
BlueBeer 2004-07-29
  • 打赏
  • 举报
回复
change事件完全可以搞定了吧,到了这个长度就不接受输入,通过粘贴超出这个长度就自动砍掉后面的
iamluodong 2004-07-29
  • 打赏
  • 举报
回复
我的问题是在用户输入的时候,就进行检测,进行截取,而不是输入完成(),你说把这个时间加入到哪里.效果同vb的maxlength一样但是要针对字节的判断而不是字
rainstormmaster 2004-07-29
  • 打赏
  • 举报
回复
//你们想过剪贴版本的数据过来的话,怎么办

一样处理,设置MaxLength属性或调用发送EM_SETLIMITTEXT消息(该消息取代了EM_LIMITTEXT消息)

如果你希望通过子类处理的话,就拦截EN_UPDATE这条通知消息,不过我个人觉得没有这个必要
online 2004-07-29
  • 打赏
  • 举报
回复
你试试就知道了,考过来的自动截取

private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
private Const EM_LIMITTEXT = &HC5

Private Sub Command3_Click()
Dim intret As Long
intret = SendMessage(Text1.hwnd, EM_LIMITTEXT, 10, ByVal 0&)
End Sub
iamluodong 2004-07-29
  • 打赏
  • 举报
回复
你们想过剪贴版本的数据过来的话,怎么办.
online 2004-07-29
  • 打赏
  • 举报
回复
Public Const EM_LIMITTEXT = &HC5
Dim intret As Long
intret = SendMessage(Text1.hwnd, EM_LIMITTEXT, 10, ByVal 0&)
online 2004-07-29
  • 打赏
  • 举报
回复
发送EM_LIMITTEXT消息
TechnoFantasy 2004-07-29
  • 打赏
  • 举报
回复
简单的你可以通过设置MaxLength属性来完成,复杂点的你可以在Change事件中完成。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧