VB 快速讀取TextBox第N行的資料

來源:互聯網
上載者:User

 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 起算。)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.