| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 636 人关注过本帖
标题:[求助]一问三不知
只看楼主 加入收藏
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
 问题点数:0 回复次数:6 
[求助]一问三不知
      小弟我初学VB不久,现遇一个难题,无法自解,望各位前辈指点!
我想做一个文本框,内容限制最多只能输入70个中文字符或160个英文字符,相关代码如下:
  For i = 1 To (strlen)
      strtemp = Mid(Text1.Text, i, 1)
   If Asc(strtemp) < 0 Then
        Text1.MaxLength = 70
        Label1.Caption = "你可以输入70个中文字符,已输入" & strlen & "个字符,还可以输入" & (70 - Len(Text1.Text))& "个字符"
    Exit Sub
    End If

Next
Text1.MaxLength = 160
        Label1.Caption = "你可以输入160个英文字符,已输入" & strlen & "个字符,还可以输入" & (160 - Len(Text1.Text))& "个字符"
    Exit Sub


但现在有一个问题就是:如果我在输入69个中文或159个英文时按回车,则字符数就会达到71或161,以至超标,请问如何解决?

[此贴子已经被作者于2005-4-8 8:28:22编辑过]


搜索更多相关主题的帖子: 一问三不知 
2005-04-01 10:50
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
得分:0 
还有
       如果我输入的"非中文字符"已经>=70个,那么:
       1、应如何编写才能实现在这前70个"非中文字符"后输入的"中文字符"能够自动删除自己(也就是使其输不进去即可),但英文字符却能正常输入,直到160个字符总数为止。
      2、应如何编写才能实现在这前70个"非中文字符"中间插入的"中文字符"能够保留,然后删除从第一个字符算起的70个字符之外的任何字符,确保输入框内只有70个字符

耐心和持久 胜过 激烈和狂热
2005-04-01 11:15
griefforyou
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:3336
专家分:0
注 册:2004-4-15
收藏
得分:0 
我写的两个函数(ASP的,在VB里可以直接用)

    '取得字符串字节长度
    Function ByteLen(Str)
        Dim Length
        Length = 0
        For i = 1 To Len(Str)
            If (Asc(Mid(Str, i, 1)) < 0) Then
                Length = Length + 2
            Else
                Length = Length + 1
            End If
            ByteLen = Length
        Next
    End Function
   
    '按字节取得字符串左边部分字符
    Function LeftByte(Str, Lens)
        Dim Length
        Length = 0
        For i = 1 To Len(Str)
            If (Asc(Mid(Str, i, 1)) < 0) Then
                Length = Length + 2
            Else
                Length = Length + 1
            End If
            If Length = Lens Then
                LeftByte = Left(Str, i)
                Exit Function
            ElseIf Length > Lens Then
                LeftByte = Left(Str, i - 1)
                Exit Function
            End If
        Next
    End Function

天津网站建设 http://www./
2005-04-01 21:35
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
得分:0 
谢谢!!!

耐心和持久 胜过 激烈和狂热
2005-04-04 10:42
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
得分:0 
最后回车问题我是这么解决的,不知有无问题?
Private Sub Text1_KeyPress(KeyAscii As Integer)
  
   Dim i ,strlen As Long
   Dim strtemp As String
   strlen =Len(Text1.Text)
      For i = 1 To strlen
    strtemp = Mid((Text1.Text), i, 1)
  
  '判断输入69个中文字符或输入159个英文字符后是否按回车,若按回车则取消该回车的输入
 If Asc(strtemp) < 0 And Len(Text1.Text) >= 69 Then
   If KeyAscii = 13 Then
      KeyAscii = 13 And KeyAscii = 8
      Exit Sub
   End If
 End If
 If Asc(strtemp) > 0 And Len(Text1.Text) >= 159 Then
   If KeyAscii = 13 Then
      KeyAscii = 13 And KeyAscii = 8
      Exit Sub
   End If
 End If
 
  Next
   Exit Sub
End Sub

[此贴子已经被作者于2005-4-5 11:10:11编辑过]



耐心和持久 胜过 激烈和狂热
2005-04-05 10:06
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
得分:0 

感谢Griefforyou提供的“单字符Undo/Redo代码”,通过引用,我在项目中已经基本能够实现撤消上一步操作的功能,但是又遇到了一个新问题: 由于我想实现的功能不是通过"点击按钮"等来触发"撤消上一步操作"的动作,而是在输入的英文字符数超过70的时候,如果在后面接着“输入中文”或“粘贴含有中文的字符串”,则自动撤消上一步操作(即回到输入中文的前一个状态),以满足“文本框中最多只有70个中文字符或160个英文字符”的原则。 现在的问题就是:虽然我在70个英文字符之后输入了中文,但是并不会主动触发撤消上一步操作的动作,而是在文本框中照常显示了我所输入的中文,一定要等我再按下任意键后才触发撤消动作,不知如何才能解决这个问题? 我所用的相关代码如下: Private Sub Text1_KeyPress(KeyAscii As Integer)

''''''

'当字符数大于70时,判断70->160个字符之间是否有中文,如有则删除之 If Len(Text1) > 70 And Len(Text1) <= 160 Then For j = 71 To Len(Text1) strtemp2 = Mid((Text1), j, 1) If Asc(strtemp2) < 0 Then '撤消上一步操作 Undo Txt_dxrr Exit Sub End If Next '当输入的英文字符超过70个字符时,如果在前70个字符之间插入了中文,则截取前70

个字符 For k = 1 To 70 strtemp3 = Mid((Text1), k, 1) If Asc(strtemp3) < 0 Then '截取前70个字符 Text1.Text = Mid((Text1), 1, 70 ) Exit Sub End If Next End If

......


耐心和持久 胜过 激烈和狂热
2005-04-07 15:25
cnliang
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2005-4-1
收藏
得分:0 
http://bbs.bc-cn.net/bbs/dispbbs.asp?boardid=6&id=15069

[此贴子已经被作者于2005-4-8 8:36:11编辑过]


耐心和持久 胜过 激烈和狂热
2005-04-07 15:27
快速回复:[求助]一问三不知
数据加载中...
 
   



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

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