none
Text in Richtextbox je nach Inhalt farbig markieren RRS feed

  • Frage

  • Hoi FreuNde,

    ich lese ein Logbuch und möchte - je nach Inhalt der Zeile - diese andersfarbig anzeigen lassen.

    In diesem Beispiel ist es der String "********".

    Hier ist mein Code soweit:

      Private Sub Logbuch_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim FILE_NAME As String = "Log.log"
        Dim TextLine As String
    
        If System.IO.File.Exists(FILE_NAME) = True Then
          Dim objReader As New System.IO.StreamReader(FILE_NAME)
          Do While objReader.Peek() <> -1
            TextLine = TextLine & objReader.ReadLine() & vbNewLine
            If TextLine.ToString.Contains("********") Then
              ForeColor = Color.Blue
            End If
          Loop
          RichTextBox1.Text = TextLine
        Else
          MsgBox("Log.log nicht gefunden")
        End If
      End Sub

    Was muss ich da wohl anderes bzw. richtig machen ?

    Gruss
    Trixi


    Be a good forum member - mark posts that contain the answers to your questions or those that are helpful
    Freitag, 14. Januar 2011 21:23

Antworten

  • Hallo,

    ich lese ein Logbuch und möchte - je nach Inhalt der Zeile - _
    diese andersfarbig anzeigen lassen.
    In diesem Beispiel ist es der String "********".

    Hier mal ein kleines Beispiel, bei dem in einer RichtextBox
    jeweils die Zeile rot dargestellt wird, die einen bestimmten,
    zufällig generierten Wochentagsnamen (Montag ... Sonntag)
    enthält.

    Kopiere den nachfolgenden Code einfach in ein leeres
    Formmodul Form1.vb

    ' / / / Beginn Code Form1.vb
    Public Class Form1
        Private WithEvents RTB As RichTextBox
        Private WithEvents Btn As Button
        Private mCntr As Integer

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

            ' Richtextbox erstellen
            RTB = New RichTextBox
            With RTB
                .Name = "RTB"
                .Font = New Font("Arial", 12)
                .Multiline = True

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

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

            End With
            Me.Controls.Add(RTB)

            ' Button erstellen
            Btn = New Button
            With Btn
                .Name = "Btn"

                .SetBounds _
                        (10, RTB.Bottom + 10, _
                         90, 40)

                .Anchor = _
                        AnchorStyles.Left Or _
                        AnchorStyles.Bottom

                .Font = New Font("Arial", 10)
                .Text = "click me"
            End With
            Me.Controls.Add(Btn)

            ' Richtextbox mit Text füllen
            Dim i As Integer
            For i = 1 To 7

                RTB.Text &= _
                        "Heute ist " & _
                        WeekdayName(i) & _
                        ControlChars.CrLf
            Next
        End Sub

        Private Sub Btn_Click _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles Btn.Click

            ' Zufälligen Wochentagsname erzeugen
            Dim WN As String
            Dim Cntr As Integer
            Dim Rnd As New Random(Now.Millisecond)
            Do
                Cntr = Rnd.Next(1, 8)
            Loop While Cntr = mCntr
            mCntr = Cntr
            WN = WeekdayName(mCntr)

            Me.Text = "Find: " & WN

            ' Text der RTB zeilenweise in String-Array rtbLines übertragen
            Dim rtbLines() As String = RTB.Lines
            Dim i As Integer

            ' evtl. vorherige Markierungen löschen
            RTB.SelectionColor = RTB.ForeColor

            For i = 0 To rtbLines.GetUpperBound(0)

                ' Prüfen, ob die Zeile den gesuchten Wochentagsnamen enthält
                If rtbLines(i).Contains(WN) Then

                    ' Beginn der Markierung: erstes Zeichen der Zeile
                    RTB.SelectionStart = RTB.GetFirstCharIndexFromLine(i)

                    ' Länge der Markierung: Anzahl Zeichen der Zeile
                    RTB.SelectionLength = rtbLines(i).Length

                    ' Den durch .SelectionStart und .SelectionLength
                    ' definierten Textteil rot einfärben.
                    RTB.SelectionColor = Color.Red

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

    Nach dem Programmstart siehst Du die Form1 mit
    einer Richtextbox, gefüllt mit Text. Jede Zeile der
    RTB enthält einen Wochentagsnamen.
    Mit einem Mausklick auf den Button wird ein zufälliger
    Wochentagsname generiert und nach diesem
    Wochentagsnamen in der Richtextbox gesucht.
    Die Zeile, welche den gesuchten Wochentagsnamen
    enthält wird in Rot dargestellt.

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

    Samstag, 15. Januar 2011 10:27

Alle Antworten

  • Hi,

    http://social.msdn.microsoft.com/Forums/de-DE/visualcsharpde/thread/a198801f-d8c7-4364-bc23-6f84eba027db behandelt eigentlich genau die gleiche Frage.

    Im letzten Eintrag steht, wie man den aktuell selektierten Inhalt einfärbt, die Selektion muss natürlich vorher erfolgen :)

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Freitag, 14. Januar 2011 21:46
    Moderator
  • Hoi Stefan,

    ist C

     

    Gruss
    Trixi


    Be a good forum member - mark posts that contain the answers to your questions or those that are helpful
    Freitag, 14. Januar 2011 21:58
  • Hi,

    ist C

    Und?

      http://converter.telerik.com/

      http://www.developerfusion.com/tools/convert/csharp-to-vb/

      ... (ganz viele andere :)

    Das bißchen Code lässt sich doch einfach damit übersetzen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Freitag, 14. Januar 2011 22:01
    Moderator
  • Hej dag,

    danke sie gut getan mit vorschlag dieses.

    Glück auf wir kennen Qunatität von Programm zerfleischer jenige.

     

    Sayonara

    Trixi


    Be a good forum member - mark posts that contain the answers to your questions or those that are helpful
    Freitag, 14. Januar 2011 22:23
  • Morschen,

    danke sie gut getan mit vorschlag dieses.

    Glück auf wir kennen Qunatität von Programm zerfleischer jenige.

    Probiert? Scheint nicht so. Es gibt viele gute Codekonverter für .NET. Und selbst wenn mal eine einzelne Zeile nicht ganz passen sollte ... ein wenig Eigeninitiative kann man doch auch zeigen.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Freitag, 14. Januar 2011 22:29
    Moderator
  • Hallo,

    ich lese ein Logbuch und möchte - je nach Inhalt der Zeile - _
    diese andersfarbig anzeigen lassen.
    In diesem Beispiel ist es der String "********".

    Hier mal ein kleines Beispiel, bei dem in einer RichtextBox
    jeweils die Zeile rot dargestellt wird, die einen bestimmten,
    zufällig generierten Wochentagsnamen (Montag ... Sonntag)
    enthält.

    Kopiere den nachfolgenden Code einfach in ein leeres
    Formmodul Form1.vb

    ' / / / Beginn Code Form1.vb
    Public Class Form1
        Private WithEvents RTB As RichTextBox
        Private WithEvents Btn As Button
        Private mCntr As Integer

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

            ' Richtextbox erstellen
            RTB = New RichTextBox
            With RTB
                .Name = "RTB"
                .Font = New Font("Arial", 12)
                .Multiline = True

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

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

            End With
            Me.Controls.Add(RTB)

            ' Button erstellen
            Btn = New Button
            With Btn
                .Name = "Btn"

                .SetBounds _
                        (10, RTB.Bottom + 10, _
                         90, 40)

                .Anchor = _
                        AnchorStyles.Left Or _
                        AnchorStyles.Bottom

                .Font = New Font("Arial", 10)
                .Text = "click me"
            End With
            Me.Controls.Add(Btn)

            ' Richtextbox mit Text füllen
            Dim i As Integer
            For i = 1 To 7

                RTB.Text &= _
                        "Heute ist " & _
                        WeekdayName(i) & _
                        ControlChars.CrLf
            Next
        End Sub

        Private Sub Btn_Click _
                (ByVal sender As Object, _
                 ByVal e As System.EventArgs _
                ) Handles Btn.Click

            ' Zufälligen Wochentagsname erzeugen
            Dim WN As String
            Dim Cntr As Integer
            Dim Rnd As New Random(Now.Millisecond)
            Do
                Cntr = Rnd.Next(1, 8)
            Loop While Cntr = mCntr
            mCntr = Cntr
            WN = WeekdayName(mCntr)

            Me.Text = "Find: " & WN

            ' Text der RTB zeilenweise in String-Array rtbLines übertragen
            Dim rtbLines() As String = RTB.Lines
            Dim i As Integer

            ' evtl. vorherige Markierungen löschen
            RTB.SelectionColor = RTB.ForeColor

            For i = 0 To rtbLines.GetUpperBound(0)

                ' Prüfen, ob die Zeile den gesuchten Wochentagsnamen enthält
                If rtbLines(i).Contains(WN) Then

                    ' Beginn der Markierung: erstes Zeichen der Zeile
                    RTB.SelectionStart = RTB.GetFirstCharIndexFromLine(i)

                    ' Länge der Markierung: Anzahl Zeichen der Zeile
                    RTB.SelectionLength = rtbLines(i).Length

                    ' Den durch .SelectionStart und .SelectionLength
                    ' definierten Textteil rot einfärben.
                    RTB.SelectionColor = Color.Red

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

    Nach dem Programmstart siehst Du die Form1 mit
    einer Richtextbox, gefüllt mit Text. Jede Zeile der
    RTB enthält einen Wochentagsnamen.
    Mit einem Mausklick auf den Button wird ein zufälliger
    Wochentagsname generiert und nach diesem
    Wochentagsnamen in der Richtextbox gesucht.
    Die Zeile, welche den gesuchten Wochentagsnamen
    enthält wird in Rot dargestellt.

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

    Samstag, 15. Januar 2011 10:27