新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 开发语言 > VB教程 > 正文:用VB快速读取TextBox第N行的数据

用VB快速读取TextBox第N行的数据

新客网 XKER.COM 2007-02-01 来源: 收藏本文
  TextBox 是以 vbCr+vbLf 为分行符号, 如果我们要逐一读取 TextBox 每一行, 无非是寻找 vbCr+vbLf 的所在位置, 然后取出每一行的字串, 不过这个方法不快,而且如果我们要读取第 N 行数据,还是要从第 1、2、…N-1 行逐一读起,实在麻烦。 还好 Windows API 提供有读取 TextBox 第 N 行的功能, 细节如下:
  1、API 的声明:
  Public Const EM_GETLINE = &HC4
  Public Const EM_LINELENGTH = &HC1
  Public Const EM_LINEINDEX = &HBB
  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 Declare Sub RtlMoveMemory Lib "KERNEL32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
  2. 程序范例:
  Sub TB_GetLine(ByVal hWnd As Long, ByVal whichLine As Long, Line As String)
  Dim length As Long, bArr() As Byte, bArr2() As Byte, lc As Long
  lc = SendMessage(hWnd, EM_LINEINDEX, whichLine, ByVal 0&)
  length = SendMessage(hWnd, EM_LINELENGTH, lc, ByVal 0&)
  If length > 0 Then
  ReDim bArr(length + 1) As Byte,bArr2(length - 1) As Byte
  Call RtlMoveMemory(bArr(0), length, 2) '准备一个存储器,传递消息之前先在存储器的前两个字节填入存储器的长度。
  Call SendMessage(hWnd, EM_GETLINE,whichLine, bArr(0))
  Call RtlMoveMemory(bArr2(0), bArr(0), length)
  Line = StrConv(bArr2, vbUnicode)
  Else
  Line = ""
  End If
  End Sub

  ' 假设要读取 Text1 第 5 行的数据
  Dim S As String
  Call TB_GetLine( Text1.hWnd, 5, S )
  ' 传回值 S 即等于第 5 行的数据
  ( 注:TextBox 的行次是从 0 起算。)
  站长在去掉有关bArr2的定义后,并将Line=Strconv(bArr2,vbUnicode)改为Line=StrConv(bArr,vbUnicode)发现程序照常运行,似乎bArr2在本程序中是多余的。不知哪位大虾能告知本人bArr2在这里的作用。
收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐