Zeilen farbig markieren

  • VB.NET

Es gibt 59 Antworten in diesem Thema. Der letzte Beitrag () ist von Gottric.

    Gottric schrieb:

    Aber wie?
    So:

    VB.NET-Quellcode

    1. Dim CharIndex As Integer = RichTextBox1.GetFirstCharIndexOfCurrentLine()
    2. Dim LineIndex As Integer = RichTextBox1.GetLineFromCharIndex(CharIndex)
    3. RichTextBox1.SelectionStart = CharIndex
    4. RichTextBox1.SelectionLength = RichTextBox1.Lines(LineIndex).Length
    5. RichTextBox1.SelectionBackColor = Color.Yellow
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Möglich, ich weiß nicht wie man im Code den curser bezeichnet. Oder ob er überhaupt ne bestimmte Bezeichnung hat.
    Ich will in der Zeile in der richtextbox die angewählt ist, also in der der schwarze Balken zum schrieben blinkt, die Zeile farbig hinterlegen. Das wars schon. Das man halt nen besseren Überblick hat.

    einfach currentline?
    Wie simple. Versuch ich heute Abend sofort.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()

    Gottric schrieb:

    Das wars schon.
    Jou.
    Teste meinen Code.
    Das wars schon. :thumbsup:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    das ist das was ich bis jetzt habe:

    VB.NET-Quellcode

    1. Private Sub txt21DBK_MouseClick(sender As Object, e As MouseEventArgs) Handles txt21DBK.MouseClick
    2. If txt21DBK.TextLength = 0 Then
    3. txt21DBK.BackColor = Color.White
    4. Else
    5. Dim CharIndex As Integer = txt21DBK.GetFirstCharIndexOfCurrentLine()
    6. Dim LineIndex As Integer = txt21DBK.GetLineFromCharIndex(CharIndex)
    7. txt21DBK.SelectionStart = CharIndex
    8. txt21DBK.SelectionLength = txt21DBK.Lines(LineIndex).Length
    9. txt21DBK.SelectionBackColor = Color.Yellow
    10. End If
    11. End Sub


    wie setzte ich denn die letzte markierung zurück, also wenn ich in ne andere Zeile klicke das wieder nur diese gelb wird?
    davon abgesehen ist die angewählte Zeile momentan nicht beschreibar, klar ist ja selectiert. aber ich will nur das die Zeile im Hintergrund geld ist in der sich der blickende schwarze Balken befindet.

    hoffe ihr versteht wie ich das meine.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gottric“ ()

    Gottric schrieb:

    zurück
    Mach zuerst alles weiß, danach die eine Zeile bunt.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub txt21DBK_MouseClick(sender As Object, e As MouseEventArgs) Handles txt21DBK.MouseClick
    2. txt21DBK.BackColor = Color.White
    3. If txt21DBK.TextLength <> 0 Then
    4. Dim CharIndex As Integer = txt21DBK.GetFirstCharIndexOfCurrentLine()
    5. Dim LineIndex As Integer = txt21DBK.GetLineFromCharIndex(CharIndex)
    6. txt21DBK.SelectionStart = CharIndex
    7. txt21DBK.SelectionLength = txt21DBK.Lines(LineIndex).Length
    8. txt21DBK.SelectionBackColor = Color.Yellow
    9. End If
    10. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie auch immer. Es wird die Zeile markiert,

    Gottric schrieb:

    in der der schwarze Balken zum schrieben blinkt
    :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ok
    aber das funktioniert nicht.
    er mach nicht die textbox weiß bzw löscht die alte markierung.
    aber das grösere Problem ist das in der Zeile dann ja nicht schreiben kann. ich will sie nicht markieren sondern nur das die zeile Gelb hinterlegt ist.

    also das die zeile in der der Curser steht aus den anderen hervorsticht.
    so muss ich sie ja anklicken und erst wenn ich wegklicke wird sie geld, sonst ist sie blau markiert.

    weisst du wie ich meine?

    Gottric schrieb:

    funktioniert nicht
    Sorry, war nicht getestet.
    Du musst alles selektieren und SelectionBackColor auf weiß setzen, Dir noch die Zeile merken und dann weiter im Text:

    VB.NET-Quellcode

    1. Private Sub txt21DBK_MouseClick(sender As Object, e As MouseEventArgs) Handles txt21DBK.MouseClick
    2. Dim index = txt21DBK.SelectionStart
    3. txt21DBK.SelectAll()
    4. txt21DBK.SelectionBackColor = Color.White
    5. txt21DBK.SelectionStart = index
    6. If txt21DBK.TextLength <> 0 Then
    7. Dim CharIndex As Integer = txt21DBK.GetFirstCharIndexOfCurrentLine()
    8. Dim LineIndex As Integer = txt21DBK.GetLineFromCharIndex(CharIndex)
    9. txt21DBK.SelectionStart = CharIndex
    10. txt21DBK.SelectionLength = txt21DBK.Lines(LineIndex).Length
    11. txt21DBK.SelectionBackColor = Color.Yellow
    12. End If
    13. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Gottric schrieb:

    nicht mehr blau
    Heb die Selektierung auf:

    VB.NET-Quellcode

    1. txt21DBK.SelectionLength = 0
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    dann springt der Curser ja nur an den Anfang und ich kann die Zeilen mittendrin nicht editieren.

    vielleciht kurz zum hintergrund:

    Ich habe einen text in meiner Richtextbox. nun möchte ich übersichtskeithalber die Zeile markieren, also es muss nicht nur der text, es kann auch gerne über den text hinaus die zeile gelb hinterlegt werden in der der curser sich befindet. Ich möchte gerne weiterhin die Zeile so bearbeiten können dass ich üebrall reinklicken kann in den text und diesen bearbieten kann. nur halt mit geldben hintergrund in der zeile in der der cureser steht.

    vielleicht ist das ja ein ganz anderer code?

    Gottric schrieb:

    springt
    Verstehe und ergänze diese Zeile:

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Dim index = txt21DBK.SelectionStart
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    geht einwandfrei, aber verstanden würde ich nicht sagen.

    VB.NET-Quellcode

    1. Private Sub txt22DBK_Click(sender As Object, e As EventArgs) Handles txt22DBK.Click
    2. Dim index = txt22DBK.SelectionStart
    3. txt22DBK.SelectAll()
    4. txt22DBK.SelectionBackColor = Color.White
    5. txt22DBK.SelectionStart = index
    6. If txt22DBK.TextLength <> 0 Then
    7. Dim CharIndex As Integer = txt22DBK.GetFirstCharIndexOfCurrentLine()
    8. Dim LineIndex As Integer = txt22DBK.GetLineFromCharIndex(CharIndex)
    9. txt22DBK.SelectionStart = CharIndex
    10. txt22DBK.SelectionLength = txt22DBK.Lines(LineIndex).Length
    11. txt22DBK.SelectionBackColor = Color.Yellow
    12. txt22DBK.SelectionLength = 0
    13. txt22DBK.SelectionStart = index
    14. End If
    15. End Sub

    Mein Code sieht nun so aus und funktioniert. Kann man noch was verbessern?

    aber noch was, gibt es auch ne möglichkeit vorherige rote formatierung beizubehalten?

    ich hab zwei textboxen die ich miteinander vergleiche. Unterschiede werden Rot hinterlegt im Backroundcolor. wenn ich jetzt in die Textbox klicke sind diee Fromatierung natürlich weg.

    VB.NET-Quellcode

    1. txt22DBK.SelectAll()
    2. txt22DBK.SelectionBackColor = Color.White

    kann ich außnahmen dazu hinzufügen? also dass er die Rote markierung lässt?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Gottric“ ()

    Gottric schrieb:

    formatierung beizubehalten
    Dann darfst Du nicht die komplette Markierung löschen, sondern nur die letzte, die mit

    VB.NET-Quellcode

    1. Dim index = txt22DBK.SelectionStart
    erstellt wird.
    Merke Dir den letzten Index in der Klasse, entfärbe den letzten und färbe den aktuellen Index.
    Pack dazu den Code in eine separate Prozedur, der Du die Zeilennummer und die Farbe übergibst.
    Allerdings ist dann die rote Farbe flöten, wenn Du da reinklickst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ok, das ist schon schwierig zu lesen. hahaha
    ich verscuhs mal.

    aber du, wenn ich jetzt in die richtextbox klicke verschiebt sich die Scrollbar zum Anfang der Zeile die ich angeklickt habe. genauso wie wenn du jetzt hier im Forum in die Nummer der Zeile in nen eingegeben Code angibst.
    Kann man das auch ändern dass sich die Scrollbar nicht nach oben verschiebt?

    Gottric schrieb:

    Scrollbar
    ? Mit RichTextBox1.ScrollToCaret() wird sichergestellt, dass die Cursorposition sichtbar ist. Allerdings kann er da hin- und herspringen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!