Textbox Text kürzen

23/11/2009 - 10:33 von PeterR | Report spam
Hallo Community,

ein Überwachungsprogramm schreibt zeilenweise, abgeschlossen mit CRLF, ein
Protokoll in eine Textbox, wobei die neuen Zeilen immer am Anfang eingefügt
werden. Ist der Text mal gut über 1000 Zeilen lang wird das Programm sehr
langsam. Nun will ich für jeden neuen Eintag eine Zeile vom Textenda kappen.
Wie kann man das bewerkstelligen, da die textbox.line Eigenschaften nur
gelesen werden können?

Vielen Dank für gute Vor- und Ratschlàge

MfG Peter Reiber
 

Lesen sie die antworten

#1 Peter Götz
23/11/2009 - 11:27 | Warnen spam
Hallo Peter,

ein Überwachungsprogramm schreibt zeilenweise, abgeschlossen
mit CRLF, ein Protokoll in eine Textbox, wobei die neuen Zeilen
immer am Anfang eingefügt werden. Ist der Text mal gut über
1000 Zeilen lang wird das Programm sehr langsam. Nun will ich
für jeden neuen Eintag eine Zeile vom Textenda kappen.
Wie kann man das bewerkstelligen, da die textbox.line
Eigenschaften nur gelesen werden können?

Vielen Dank für gute Vor- und Ratschlàge



Kopiere nachfolgenden Code in ein leeres Formmodul (Form1.vb)

' /// Code in Form1.vb
Public Class Form1
Private WithEvents TextBox1 As TextBox
Private WithEvents Timer1 As Windows.Forms.Timer
Private mRowCount As Integer

Private Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shown

TextBox1 = New TextBox
With TextBox1
Font = New Font("Arial", 12)
.Multiline = True

.SetBounds _
(10, 10, _
Me.ClientSize.Width - 20, _
Me.ClientSize.Height - 20)

.Anchor = _
AnchorStyles.Left Or _
AnchorStyles.Top Or _
AnchorStyles.Right Or _
AnchorStyles.Bottom
End With

Me.Controls.Add(TextBox1)

Timer1 = New Windows.Forms.Timer
With Timer1
.Interval = 1000
.Start()
End With
End Sub

Private Sub Form1_FormClosing _
(ByVal sender As Object, _
ByVal e As FormClosingEventArgs _
) Handles Me.FormClosing

If Timer1 IsNot Nothing Then
Timer1.Stop()
Timer1.Dispose()
End If
End Sub

Private Sub Timer1_Tick _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Timer1.Tick

' Neue Zeile vor dem bisherigen Text einfügen
TextBox1.Text = _
Format _
(Now, "HH:mm:ss") & _
ControlChars.CrLf & TextBox1.Text

mRowCount += 1

If mRowCount > 10 Then
' letztes Cr suchen
Dim CrPos As Integer = _
TextBox1.Text.LastIndexOf(ControlChars.Cr)

' Text abschneiden
TextBox1.Text = _
TextBox1.Text.Substring(0, CrPos)
End If

End Sub
End Class
' \\\ E N T E


Nach dem Programmstart wird jede Sekunde eine neue
Zeile in die Textbox eingefügt. Ist der Text lànger als 10
Zeilen, dann wird beim Einfügen einer neuen Zeile
jeweils die letzte (àlteste) Zeile abgeschnitten.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen