Announcement

Collapse
No announcement yet.

Probleme Formatierung mit RichtextBox

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme Formatierung mit RichtextBox

    Hallo,

    ich bin neu im Forum, ich habe lange Jahre VB programmiert und ich versuche mich in VB.net einzuarbeiten.

    Ich habe folgendes Problem:
    Ich habe ein Programm geschrieben, was mir aus einer Datei die Zeilen ausliest und diese bearbeitet und dann in eine RichtextBox ausgibt und in eine Datei.

    Nun möchte ich das geänderte in der Richtextbox farblich hervorheben.
    Ich schreibe die geänderte Zeile in die Richtextbox, dann suche ich in der Richtextbox den String, den ich geändert habe und selektiere ihn, dann passe ich Farbe und Font an.
    Code:
    RichTextBox1.AppendText(classZeile.getExport_line() & vbNewLine)
    RichTextBox1.SelectionStart = RichTextBox1.Find(corrStr)
    RichTextBox1.SelectionColor = Color.Green
    Dim bfont As New Font(RichTextBox1.Font, FontStyle.Bold)
    RichTextBox1.SelectionFont = bfont
    Das klappt theoretisch.
    ABER wenn ich z.B. in der 4 Zeile den Text "BL 20" markieren will, findet er in Zeile 1 auch "BL 20" und selektiert das.

    Okay, dann habe ich die Überladung gefunden, dass er festlegen kann wo er mit der Suche starten soll:

    Code:
    RichTextBox1.AppendText(classZeile.getExport_line() & vbNewLine)
    RichTextBox1.SelectionStart = RichTextBox1.Find(corrStr, such_start, RichTextBox1.TextLength, RichTextBoxFinds.None)
    such_start = RichTextBox1.Find(corrStr)
    RichTextBox1.SelectionLength & " " & RichTextBox1.SelectionStart)
    RichTextBox1.SelectionColor = Color.Green
    Dim bfont As New Font(RichTextBox1.Font, FontStyle.Bold)
    RichTextBox1.SelectionFont = bfont
    Also merke ich mir die letzte Stelle und fange dort an zu suchen, GEHT NICHT erfindet wieder das in der ersten Zeile der Textbox :-(

    Okay dann habe ich versucht mit
    Code:
    RichTextBox1.SelectionStart = RichTextBox1.Find(corrStr,RichTextBoxFinds.Reverse)
    Dass er Rückwärts sucht, denn die zu ändernde Zeile ist ja die letzte, geht auch nicht.

    Mache ich einen Gedankenfehler????

    Anbei nochmal die debug-Ausgabe:
    BL 20 5 94
    BL 5 5 168
    BL 10 5 244
    BL 20 5 94


    Hoffe Ihr könnt mir helfen!!!

    Gruss Alex
    Zuletzt editiert von facebraker; 08.10.2008, 11:19.

  • #2
    Hallo,

    ich habe nochmal bei google gesucht bin bin über einen Thread bei Euch gestolpert:

    http://entwickler-forum.de/showthrea...to_threadtools

    Das funktioniert auch, aber ich verstehe nicht, warum es bei mir nicht funktioniert, ich mache doch das selbe oder?

    Gruss Alex

    Comment


    • #3
      Lösung?

      Hallo,

      ich habe mich mal an den Code des anderen Threads gehalten und meinen Code angepasst, ich habe das
      Code:
      RichTextBox1.SelectionStart=...
      rausgenommen und nur das find gemacht, was ist der Unterschied, jetzt findet er den Text und und selektiert Ihn nicht???

      Code:
      RichTextBox1.Find(corrStr, RichTextBoxFinds.Reverse)
      Dim color As Color = color.Green
      RichTextBox1.SelectionColor = color.Green
      Dim bfont As New Font(RichTextBox1.Font, FontStyle.Bold)
      RichTextBox1.SelectionFont = bfont
      Dim font As New Font(RichTextBox1.Font, FontStyle.Bold)
      Sorry, aber irgendwie will sich bei mir kein lerneffekt einstellen!

      Gruss ALex

      Comment


      • #4
        Lösung!

        Hallo,

        mit folgendem Beispiel kann der Text aus TextBox1 dort eingefügt werden wo gerade die Selection in der RichTextBox ist - zB mit Maus ausgewählt. Also nicht zwingend am Ende.

        [highlight=vb.net]
        Private Sub button1_Click(sender As Object, e As EventArgs)
        ' Text an der Cursorposition einfügen:
        Dim startPos As Integer = richTextBox1.SelectionStart
        richTextBox1.SelectedText = textBox1.Text

        ' Schrift wählen:
        Dim font As New Font("Arial", 10, FontStyle.Bold)
        Dim color__1 As Color = Color.Red

        ' Eingefügten Text hervorheben:
        richTextBox1.Find(textBox1.Text, startPos, RichTextBoxFinds.MatchCase)
        richTextBox1.SelectionColor = color__1
        richTextBox1.SelectionFont = font
        End Sub
        [/highlight]

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Also habe ich mit dem
          Code:
          RichTextBox1.SelectionStart...
          mich selber ausgetrickst weil er dadurch an der 1.Stelle stand?

          Danke für die Info!!!

          Gruss Alex

          Comment


          • #6
            Hallo,

            noch eine kleine Erweiterung. Mit dieser kann der ausgewählte Text in einer Textbox geändert werden. Die Änderungen werden in der Richtextbo dargestellt. Probiers mal.

            Im Formular befinden sich
            • RichTextBox1
            • TextBox1
            • Button1


            [highlight=vb.net]
            Imports System
            Imports System.Drawing
            Imports System.Windows.Forms

            Namespace WindowsFormsApplication1
            Public Partial Class Form1
            Inherits Form
            Public Sub New()
            InitializeComponent()
            End Sub

            Private Sub button1_Click(sender As Object, e As EventArgs)
            ' Text an der Cursorposition einfügen:
            Dim startPos As Integer = richTextBox1.SelectionStart
            richTextBox1.SelectedText = textBox1.Text

            ' Schrift wählen:
            Dim font As New Font("Arial", 10, FontStyle.Bold)
            Dim color__1 As Color = Color.Red

            ' Eingefügten Text hervorheben:
            richTextBox1.Find(textBox1.Text, startPos, RichTextBoxFinds.MatchCase)
            richTextBox1.SelectionColor = color__1
            richTextBox1.SelectionFont = font
            richTextBox1.SelectionBackColor = Color.White
            End Sub

            Private Sub textBox1_Enter(sender As Object, e As EventArgs)
            ' Markierten Text zur Bearbeitung farblich hinterlegen:
            Dim color__1 As Color = Color.LightBlue
            richTextBox1.SelectionBackColor = color__1

            ' Markierten Text zur Bearbeitung in TextBox1 schreiben:
            textBox1.Text = richTextBox1.SelectedText
            End Sub

            Private Sub textBox1_TextChanged(sender As Object, e As EventArgs)
            ' Geänderten Text in die RichtTextBox schreiben.
            ' Dazu wird die aktuelle Startposition gemerkt, der Text geändert
            ' und die neue Markierung gesucht.
            ' Ohne diesen Vorgang wird SelectedText nach der Wertzuweisung
            ' an das Ende gestellt und kommt zu einer kryptischen
            ' Konkatenation der Zeichen:
            Dim startPos As Integer = richTextBox1.SelectionStart
            richTextBox1.SelectedText = textBox1.Text
            richTextBox1.Find(textBox1.Text, startPos, RichTextBoxFinds.MatchCase)
            End Sub
            End Class
            End Namespace
            [/highlight]

            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hi Gü,

              funzt!!

              Danke!!!

              Comment

              Working...
              X