如何判断Textbox里的字节数

wudiccj 2005-03-24 12:49:57
我已经通过textbox的textlength来控制textbox的字节数一旦达到49个的时候,就做出程序反应(主要是刚好textbox字输到刚好可以看到的位置,不会继续往下输而使前面的字看不到了,但是我后来又发现如果我换用英文输的话,结果还有好大一段空白就玩完了,原来英文的字节数要小很多,但是字的个数居然又和中文一样,现在想改用字节数来控制,请问怎么判断Textbox里的字节数多少。
...全文
449 34 打赏 收藏 举报
写回复
34 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wjcking 2005-03-25
f
  • 打赏
  • 举报
回复
hidejay 2005-03-24
那么复杂不能用LEN吗?
  • 打赏
  • 举报
回复
hamadou 2005-03-24
“生成”菜单 -》“生成你的项目名”
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
都搞好了,就是不知道怎么生成用户控件,代码也写进去了。生成按扭在哪里啊。
  • 打赏
  • 举报
回复
zzzjaychung 2005-03-24
我也是在工作,有空就上来看看,不过大家的问题好难,都不会解,,,哈哈哈。
  • 打赏
  • 举报
回复
hamadou 2005-03-24
在你的项目里直接添加“用户控件”--》在名字里输入“maxtextbox”,然后将上面的代码粘贴进去,生成,在工具栏的最下面就会发现该控件了。以后想在其他的项目里使用,在工具栏里点右键,“自定义工具栏”,选择com选项卡,然后找到相应的dll文件(你需要给它添加到一个组件类里)在需要的控件前的复选框打勾即可。
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
谢谢,怎么用,控件怎么添加到工具栏里
  • 打赏
  • 举报
回复
tl_pear 2005-03-24
hamadou(闵峰) 兄果然厉害,
方法比我的高明多了!
  • 打赏
  • 举报
回复
hamadou 2005-03-24
写了一个用户控件,可以达到复制和输入的控制。
Public Class maxtextbox
Inherits System.Windows.Forms.TextBox

#Region " Windows 窗体设计器生成的代码 "

Public Sub New()
MyBase.New()

'该调用是 Windows 窗体设计器所必需的。
InitializeComponent()

'在 InitializeComponent() 调用之后添加任何初始化

End Sub

'UserControl 重写 dispose 以清理组件列表。
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub

'Windows 窗体设计器所必需的
Private components As System.ComponentModel.IContainer

'注意:以下过程是 Windows 窗体设计器所必需的
'可以使用 Windows 窗体设计器修改此过程。
'不要使用代码编辑器修改它。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container()
End Sub

#End Region
Private h As Integer
Private m_max As Integer = 10
Public Property mlength() As Integer
Get
Return m_max
End Get
Set(ByVal Value As Integer)
If Value >= 1 Then
m_max = Value
End If
End Set
End Property
Public Function checkboolean() As Boolean
Dim count As Integer = System.Text.Encoding.Default.GetByteCount(Me.Text)
If count >= 10 Then
h = Me.Text.Length
Return True
Else
Return False
End If
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
Dim KeyAsc As Integer = m.WParam.ToInt32
Select Case m.Msg
Case &H102 '按键
If checkboolean() Then
Me.MaxLength = h
Else
Me.MaxLength = m_max
End If
Case &H302 '复制
If checkboolean() Then
Return
End If
End Select
MyBase.WndProc(m)
End Sub
End Class
-----------------------------另外:还有了,wudiccj(软件黄牛) 兄,以后不要说什么“没有闵峰不行”之类的话了,因为看了真的很惭愧。因为不是很忙,所以偷着来这里看,等以后忙了,估计会来的少些。最主要的是我还没有那么高的水平,真的,这不是谦虚,我自己了解我自己。希望我们都可以在这里互相帮助相互学习!加油哦!楼主!
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
被搞死机了,飘叶寻梦有点强。不行的说。
  • 打赏
  • 举报
回复
tl_pear 2005-03-24
Dim enc As Encoding = Encoding.Default
Dim us As String = TextBox1.Text
Dim arr As Byte() = enc.GetBytes(us)

if arr.Length>=49 then
’只取前49个
textbox1.text=""
for i=0 to 49
textbox1.text=textbox1.text+CStr(arr.GetValue(i))
next
end if
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
就是在textchange事件里写。
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
闵峰真乃vb.net网友之福,CSDN之福啊。现在基本上已经解决了,不过就差一个问题,就是如果最后只剩下一个字符空间给我输了,我不输,我才用复制粘贴,这样就无论多少个字符都能贴上去了。怎么办,我现在想到个解决的办法,可惜我代码不会写,因为对vb.net的代码实在是不熟悉。谢谢各位帮忙。我的思路是这样的:
就是当文本框接收字符输入时就采用检测法,一但检测到超过98个字符,那么就自动把第98个字符之后的字符全自动删除,这样代码怎么实现。
  • 打赏
  • 举报
回复
hamadou 2005-03-24
注意:这里以10来模拟了最大的输入数字,也就是98
Public Function checkboolean() As Boolean
Dim count As Integer = System.Text.Encoding.Default.GetByteCount(Me.TextBox1.Text)
If count >= 10 Then
m = Me.TextBox1.Text.Length
Return True
Else
Return False
End If

End Function



Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
If checkboolean() Then
Me.TextBox1.MaxLength = m
Else
Me.TextBox1.MaxLength = 10
End If
End Sub
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
我的代码是:
If arr.Length >= 98 Then
TextBoxWkPro1.MaxLength = arr.Length
TextBoxWkPro2.Focus()
End If
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
控制不住,我在change事件里也做了,在keypress事件里也做了控制,发现可以控制中文字符,因为我们打中文的时候,不是马上就输进去的,是想跳出字符框让我们选汉字,所以keypress可以控制住,而输入数字和字母的时候,由于是一下就输进去的,所以控制不住,还是能被输进去。大家可以自己试下。
  • 打赏
  • 举报
回复
tl_pear 2005-03-24
同意楼上的!
textbox有一个maxlength属性,不过它是按字符的。
所以,你如果要按字节来判断的话,可以在textchange事件里去控制。
  • 打赏
  • 举报
回复
hamadou 2005-03-24
其实,如果要控制输入,可以在textbox控件的textchange里用上面的内容来判断,做一个函数,返回值是一个布尔值,如果达到了98个就为true,否则为false,发现它为true的话就立即设置最大宽度为现在的长度。
或者在keypress里调用这个函数,如果为真,则handle = ture
  • 打赏
  • 举报
回复
weiljj 2005-03-24
我覺得關鍵最後樓主是想得到什麼編碼的字串,如果最終樓主得到的字串都是Unicode的話,無認是’a’,還是’中’,不都是2個字節的嗎?甚而UTF8,UTF16等都會不一樣的.
  • 打赏
  • 举报
回复
wudiccj 2005-03-24
回答完这个我就散分了,不好意思,没有问清楚。就这一步了。麻烦各位高手了。
  • 打赏
  • 举报
回复
加载更多回复(14)
相关推荐
发帖
VB

1.6w+

社区成员

VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
帖子事件
创建了帖子
2005-03-24 12:49
社区公告
暂无公告