第2个回答 2011-05-09
放一个文本框,设置其multiline属性为true
然后放三个label 1 2 3
放一个按钮
代码如下:
Private Sub Command1_Click()
On Error Resume Next
Dim s() As String
s = Split(Text1.Text, vbCrLf)
Label1.Caption = s(0)
Label2.Caption = s(1)
Label3.Caption = s(2)
End Sub
第3个回答 2011-05-09
Private Const EM_GETLINE = &HC4
Private Const EM_LINELENGTH = &HC1
Private 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)
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
Private Sub Command1_Click()
Dim S As String
Call TB_GetLine(Text1.hWnd, 2, S)
Label1.Caption = S
Label2.Caption = S
Label3.Caption = S
End Sub
' 假设要读取 Text1 第 5 行的数据
' 传回值 S 即等于第 5 行的数据
'( 注:TextBox 的行次是从 0 起算。)