今天是 2026-6-8 星期一 QQ:545684816 TEL:13979373522
首  页 | 汉字编码 | 科普知识 | 竞赛之窗 | 音乐美术 | 婺中电教  
VB文本框编程技巧
发表时间:2009-10-3    浏览次数:1351

    一、自动选择文本内容
    设置文本框的SelStart和SelLength属性值即可完成文本的选择,SelStart为文本选择的起点,SelLength为文本选择的长度。如果选择

Text1中的所有文本内容,代码如下:
    Text1.SelStart = 0
    Text1.SelLength = Len(Text1.Text)
    Text1.SetFocus  '必须让文本框获得焦点

    二、文本输入完毕按回车键时消声
    文本的输入往往都以回车键结束,但是系统会发出“嘀”的一声,为了消除这种不愿意听到的声音,只要在文本控件的KeyPress事件中添

加以下代码即可:
    If KeyAscii = 13 Then
       KeyAscii = 0     'KeyAscii是输入文本的ASCII码值,下同。
       '这里可添加按回车键要执行的代码
    End If

    三、如何让文本框只能输入数字
    在一些特定的输入环境下,有时只需输入阿拉伯数字,为了防止输入的错误,需要禁止其它数据的输入,完成这项功能方法是:检测输入

文本的ASCII码值,将不符合输入要求的过滤,实现的程序代码如下:
    If KeyAscii < 48 Or KeyAscii > 57 Then
       KeyAscii = 0
       Beep  '这里加入了错误输入报警
    End If

    四、让文本框具有只读属性
    程序编写中,有时需要用文本框来显示数据,并希望该数据不得修改,这时要求文本框具有只读属性,实现的方法是使用Locked=true属性

    五、检测多行文本框的总行数
    此功能由API函数SendMessage完成,调用此函数向文本框发送EM_GETLINECOUNT消息即可得到文本框的总行数,范例程序代码如下:
    'API函数声明,后面的代码中将不再重复
    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_GETLINECOUNT = &HBA
    Dim ret As Integer
    ret = SendMessage(Text4.hwnd, EM_GETLINECOUNT, 0, 0)
    MsgBox "此文本框共有 " + CStr(ret) + " 行文本。"

    六、获取光标在多行文本框中的位置
    调用SendMessage函数向文本框发送EM_GETSEL消息可得到光标位置之前的文本长度,发送EM_LINEINDEX消息可得到光标所在行之前的文本

行的文本长度,二者的差就是光标在所在行中的列;发送EM_LINEFROMCHAR消息可得到光标在文本框中的行数,范例程序代码如下:
    Private Const EM_GETSEL = &HB0
    Private Const EM_LINEINDEX = &HBB
    Private Const EM_LINEFROMCHAR = &HC9
    Dim iX, iY, iL, iL1, iL2 As Long
    SendMessage Text4.hwnd, EM_GETSEL, iL1, iL2
    iL = SendMessage(Text4.hwnd, EM_LINEINDEX, -1, 0)
    iX = iL2 - iL
    iY = SendMessage(Text4.hwnd, EM_LINEFROMCHAR, -1, 0)
    MsgBox "当前列:" + Str(iX) + Chr(13) + "当前行:" + Str(iY)

    七、读取多行文本框某行的文本
    调用SendMessage函数向文本框发送EM_GETLINE消息可得到某行的文本内容,范例程序代码如下:
    Private Const EM_GETLINE = &HC4
    Dim ret As String
    Dim cline As Long
    ret = Space(1024)
    '获取光标行
    cline = SendMessage(Text4.hwnd, EM_LINEFROMCHAR, -1, 0)
    SendMessage Text4.hwnd, EM_GETLINE, cline, ByVal ret
    ret = RTrim(ret)  '去掉右侧多余的空格

    八、撤销上次文本输入
    调用SendMessage函数向文本框发送EM_UNDO消息即可实现撤销功能,范例程序代码如下:
    Private Const EM_UNDO = &HC7
    SendMessage Text4.hwnd, EM_UNDO, 0, 0

    九、复制选择内容到剪贴板
    调用SendMessage函数向文本框发送EM_COPY)消息即可将选择的文本复制到剪贴板上(EM_CUT剪贴、EM_PASTE粘贴,范例程序代码如下:
    '全选
    Text4.SelStart = 0
    Text4.SelLength = Len(Text4.Text)
    Text4.SetFocus
    SendMessage Text4.hwnd, WM_COPY, 0, ByVal 0&

    十、获取中英混合文本的长度
    很多情况下,计算中英混合字符串长度,我们希望中文字长度以2计算,英文字母长度以1计算,要完成这项功能,需要联合使用VB中的

LenB和Strconv函数,Strconv的作用是字符串内容的转换,第二个参数VbFromUnicode的作用是把“双字节”的字符串转换成中文字占2个字节

、英文占用1个字节的字符串,接着调用LenB函数即可获得文本长度。范例程序代码如下:
    Dim ret As Integer
    ret = LenB(StrConv(Text5.Text, vbFromUnicode))
    MsgBox "长度为 " + CStr(ret) + " 个字符位"


 

Copyright© 2006-2026, All rights reserved。
地址:紫阳镇天佑西路8号 站长:汪有万 建站时间:2006-9-1