Hauptseite >Tips zu VB5/6 >  Zeilenweises Auslesen einer Multiline-Textbox
 
Um die einzelnen Zeilen einer TextBox auszulesen, können Sie den von der .Text-Eigenschaft gelieferten String nach vbNewLine durchsuchen und den String an diesen Stellen zerlegen (ab VB6 auch mit der Split()-Funktion, oder verwenden Sie einer der alternativen Methoden von vbspeed).
Damit finden Sie jedoch nur die "harten" Zeilenumbrüche, die durch Drücken der Return-Taste vom Benutzer so festgelegt wurden. Wenn Sie auch sehen wollen, an welchen Stellen "weiche" Umbrüche von Windows eingefügt wurden, verwenden Sie die folgenden Methoden:


'API-Deklarationen; gehören in ein Standard-Modul
Public Declare Function SendMessageAsString& Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd&, ByVal wMsg&, ByVal wParam&, ByVal lParam As String)
Public Declare Function SendMessageAsLong& Lib "user32" Alias "SendMessageA" _
  (ByVal hwnd&, ByVal wMsg&, ByVal wParam&, lParam&)
            

Public Function GetTextBoxLineCount(ByVal tx As TextBox) As Long
'Ermitteln der Anzahl der Zeilen in einer TextBox
Const EM_GETLINECOUNT = &HBA
  If Len(tx.Text) = 0 Then
  GetTextBoxLineCount = 0
  Else
  GetTextBoxLineCount = SendMessageAsLong(tx.hwnd, EM_GETLINECOUNT, 0, 0)
  End If
End Function
            

Public Function GetTextBoxLine(ByVal tx As TextBox, ByVal LineNumber As Long) As String
'Auslesen einer Zeile aus der TextBox; die erste Zeile hat den Index 0.
Dim byteLo As Integer, byteHi As Integer, Buffer As String, l As Long
Const MAX_CHAR_PER_LINE = &H100
Const EM_GETLINE = &HC4
byteLo = MAX_CHAR_PER_LINE And &HFF
byteHi = Int(MAX_CHAR_PER_LINE / &H100)
Buffer = Chr$(byteLo) & Chr$(byteHi) & Space$(MAX_CHAR_PER_LINE - 2)
l = SendMessageAsString(tx.hwnd, EM_GETLINE, LineNumber, Buffer)
GetTextBoxLine = Left$(Buffer, l)
End Function
            

Anwendungsbeispiel:

Dim i As Long
  For i = 0 To GetTextBoxLineCount(Text1) - 1
  Debug.Print GetTextBoxLine(Text1, i)
  Next
            
Hauptseite >  Tips zu VB5/6 >  diese Seite