[VB] RichText Highlighter

nein ich habe alle variablen überprüft... keine der variablen ist -1
deshalb denke ich mal, das sich das -1 aus der funktion selbst ergibt...

habe jetzt alle möglichkeiten für RichTextBoxFinds ausprobiert... geht mit keiner...
 
Ist es wirklich die gleiche Meldung wie im Ausgangspost?
Dort wird ja angemeckert das -1 an SelectionStart übergeben wird.
Und laut dir (und dem Code) sollte dies ja nicht der Fall sein.
 
Ist es wirklich die gleiche Meldung wie im Ausgangspost?
Dort wird ja angemeckert das -1 an SelectionStart übergeben wird.
Und laut dir (und dem Code) sollte dies ja nicht der Fall sein.

Das ist ja gerade das weshalb ich den thread auf gemacht habe...
Es ist für mich total uneinsichtlich,
wo dieser fehler ist da keine der variablen die in meinem source sind
den wert -1 enthalten...

Die fehlermeldung ist mmer exakt die gleiche...
Im debugger wird auch immer die Funktion .Find(...) gelb unterlegt.

Ich habe auch schon gegoogled nach RichText Highlightern...
habe jedoch keine source beispiele gefunden welche funktionieren.
 
Zuletzt bearbeitet:
Du könntest höchstens mal
Code:
RichTextBox2.Find("insert", lpos, RichTextBoxFinds.WholeWord Or RichTextBoxFinds.NoHighlight);
probieren. (Sollte richtig sein, kenn mich aber nicht so gut mit VB aus)
Ging nicht wirklich^^
Du kennst dich ned gut mit VB aus... deshalb wollte ich noch anmerken das es im prinzip in VB keine semikolons gibt^^

Aber es gibt eine erfreuliche nachricht^^ dein link hat mich nemlich schon um einiges weiter gebracht^^
Ich habe jedoch immer noch ein kleines Problem, und zwar wird der cursor nachdem ich das erste mal insert eingegeben habe
(wenn ich nach diesem wort suche) vor diesem insert fest gesetzt.
Um das selbst mal zu testen bzw zu sehen habe ich das teil mal fertig kompiliert hochgeladen.

Hier alles an Source was dazugehört^^

Visual Basic:
    Dim lpos As Integer = 0
    Dim myfont As New Font("Arial", 10, FontStyle.Bold)
    Dim mycolor As Color = Color.Red
    Dim wgot As Integer
    Dim time1 As Date
    Dim time2 As Date
    Dim time3 As TimeSpan

    Public Function FindMyText(ByVal text As String, ByVal start As Integer) As Integer
        ' Initialize the return value to false by default.
        Dim returnValue As Integer = -1

        ' Ensure that a search string has been specified and a valid start point.
        If text.Length > 0 And start >= 0 Then
            ' Obtain the location of the search string in richTextBox1.
            Dim indexToText As Integer = RichTextBox2.Find(text, start, _
                RichTextBoxFinds.MatchCase)
            ' Determine whether the text was found in richTextBox1.
            If indexToText >= 0 Then
                returnValue = indexToText
            End If
        End If

        Return returnValue
    End Function

    Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox2.TextChanged
        time3 = time2.Subtract(time1)
        wgot = time3.Milliseconds
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim hilfsvar As Integer = FindMyText("insert", lpos)
        If (hilfsvar <> -1) Then
            With RichTextBox2
                .SelectionStart = hilfsvar
                .SelectionFont = myfont
                .SelectionColor = mycolor
                .DeselectAll()
            End With
        End If
        If ((time3.Milliseconds - wgot) >= 500) Then
            Timer1.Stop()
        End If
    End Sub


Und hier einmal der link zum download: DOWNLOAD
Achtung: Das ist eine EXEcutable datei.
Wer also angst hat ich schicke Viren rum: Entweder nicht saugen oder es mal auf virustotal.com o.Ä. scannen :)



Hoffe das mir da jetzt jemand helfen kann :confused:
 
Merk dir am besten vorm highlighten die letzte Cursorposition (SelectionStart) und setzte diese wieder wenn Highlighten durch ist.

Und der Timer läuft immer weiter, da gibts wohl noch ein problem mitm Stop, ist aber zu spät um das genauer anzusehen :D
Nachtrag: Probiers mal ohne das Hilfsdatum (timer3), so wie shaki vorgeschlagen hat.
 
Zuletzt bearbeitet:
Hast du oder jemand noch eine andere Idee? :s
Kann man das nicht iwie hinbekommen das die wörter überhaupt nicht ausgewählt werden oder so?

Jetzt ist es so,
dass wenn ich schreibe alles geht... aber sobald ich aufhöre springt der cursor wieder hinter das wort^^

Hier mal wie mein Source jetzt Aussieht:
Visual Basic:
    Dim lpos As Integer = 0
    Dim myfont As New Font("Arial", 10, FontStyle.Bold)
    Dim mycolor As Color = Color.Red

    Public Function FindMyText(ByVal text As String, ByVal start As Integer) As Integer
        ' Initialize the return value to false by default.
        Dim returnValue As Integer = -1

        ' Ensure that a search string has been specified and a valid start point.
        If text.Length > 0 And start >= 0 Then
            ' Obtain the location of the search string in richTextBox1.
            Dim indexToText As Integer = RichTextBox2.Find(text, start, _
                RichTextBoxFinds.MatchCase)
            ' Determine whether the text was found in richTextBox1.
            If indexToText >= 0 Then
                returnValue = indexToText
            End If
        End If

        Return returnValue
    End Function

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Stop()
        Dim hilfsvar As Integer = FindMyText("insert", lpos)
        If (hilfsvar <> -1) Then
            RichTextBox2.SelectionStart = hilfsvar
            If (RichTextBox2.SelectionColor = Color.Black) Then
                With RichTextBox2
                    .SelectionFont = myfont
                    .SelectionColor = mycolor
                    .DeselectAll()
                End With
            Else
                RichTextBox2.DeselectAll()
            End If
        End If
    End Sub

    Private Sub RichTextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox2.TextChanged
        Timer1.Stop()
        Timer1.Start()
    End Sub
 
soweit ich weiß nicht außer du lernst das RTF Format (oder andere (kostenpflichtige) Controls) ;)

Merke dir einfach bevor du FindMyText aufrufst die Cursorposition.
Und nach dem du dein Highlight zeugs gesetzt hast wieder die alte Position setzen.

Ungefähr so:
Code:
Dim oldSel As Integer = RichTextBox2.SelectionStart
'---FindMyText Zeuchs-----
Dim hilfsvar As Integer = FindMyText("insert", lpos)
If (hilfsvar <> -1) Then
        RichTextBox2.SelectionStart = hilfsvar
        If (RichTextBox2.SelectionColor = Color.Black) Then
                With RichTextBox2
                        .SelectionFont = myfont
                        .SelectionColor = mycolor
                        .DeselectAll()
                End With
        Else
                RichTextBox2.DeselectAll()
        End If
End If
'-----------
RichTextBox2.SelectionStart = oldSel
 
so habe eine kleine zeile geändert bzw. hinzugefügt...
nu is es so weit gut aber man schreibt nachdem die farbe geändert wurde mit der geänderten farbei weiter 0.0

Hat da jemand eine idee?

habe folgende Zeilen geändert: (7 , 14)
Visual Basic:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Stop()
        Dim hilfsvar As Integer = FindMyText("insert", lpos)
        If (hilfsvar <> -1) Then
            RichTextBox2.SelectionStart = hilfsvar
            If (RichTextBox2.SelectionColor = Color.Black) Then
                lpos = hilfsvar + RichTextBox2.SelectionLength
                With RichTextBox2
                    .SelectionFont = myfont
                    .SelectionColor = mycolor
                    .DeselectAll()
                End With
            Else
                lpos = hilfsvar + RichTextBox2.SelectionLength
                RichTextBox2.DeselectAll()
            End If
        End If
    End Sub

*EDIT*
Verdamt... So wird aber jetzt wenn ich etwas entferne eine Fehlermeldung ausgegeben weil der Text kürzer geworden ist und die letzte selection aus dem bereich des Textes der da ist raus rutscht >.<
*EDIT2*
Ok das problem ausm Edit is gefixt xD
Visual Basic:
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Timer1.Stop()
        Dim hilfsvar As Integer = FindMyText("insert", lpos)
        If (hilfsvar <> -1) Then
            If (hilfsvar < RichTextBox2.TextLength) Then
                RichTextBox2.SelectionStart = hilfsvar
                If (RichTextBox2.SelectionColor = Color.Black) Then
                    lpos = hilfsvar + RichTextBox2.SelectionLength
                    With RichTextBox2
                        .SelectionFont = myfont
                        .SelectionColor = mycolor
                        .DeselectAll()
                    End With
                Else
                    lpos = hilfsvar + RichTextBox2.SelectionLength
                    RichTextBox2.DeselectAll()
                End If
            Else
                lpos = 0
            End If
        End If
    End Sub
 
Zuletzt bearbeitet:
Zurück