Updating eines Controls ausschalten & Alles Schwarz färben

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von Load-soft.ch.vu.

    Updating eines Controls ausschalten & Alles Schwarz färben

    Hi,
    Ich habe ein Codeeditor Control aus der Richtextbox gemacht. Da ich dafür Text Selektieren musste (Syntax anstreichen) wollte ich fragen ob man es für eine bestimmte Zeit ausschalten kann d.h. dass der User nur sieht wie das Control vorher aussah.
    Also beispielsweise:
    In der Richtextbox steht Hallo Welt und das Programm schaltet das Updaten aus Selektiert alles einmal und Deselektiert es wieder. Jetzt soll der Benutzer die Deselektion nicht sehen. Gibt es da ne Möglichkeit?
    Wenn ich das mit Hide/Show oder Visible = false/Visible = true mache dann Flackert das Extrem.

    Zweite Frage:
    Wie kann ich bei einer Richtextbox den ganzen Text schwarz Färben.
    Wenn ich alles Selektiere die Farbe einstelle und alles wieder Deselektiere dann klappt das nicht. ForeColor klappt auch nicht und wenn ich jeden Einzelnen Buchstaben Schwarz mache dies wäre zu Performance Fressend.
    Gibs da ne Sub für?

    Freue mich auf Antworten.
    Mfg
    Loadsoft


    Edit:
    Die Hide Selection eigenschaft habe ich gefunden aber die ist vieeeel zu flackernd.
    Mfg
    Loadsoft

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Load-soft.ch.vu“ ()

    zur ersten Frage, wenn du das ganze direkt in die RTF eigenschaft mit RegEx schreibst, dann flackert es auch nicht, weil es ja nur einmal bearbeitet wird...

    zum zweiten Speichere die RTF Eigenschaft zwischen, bevor du das SyntaxHighlighting durchgeführt hast und setzt es auf diese...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    du findest die Positionen vlt. mit RegEx, aber du sollst den RTF Code direkt bearbeiten mit RegEX also im RichTextBox Format...

    sicher, dass du die RTF Eigenschaft vor dem SyntaxHighlighting zwischen speicherst? Könnte ich evtl. den Code mal sehen?
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    du findest die Positionen vlt. mit RegEx, aber du sollst den RTF Code direkt bearbeiten mit RegEX also im RichTextBox Format...

    sicher, dass du die RTF Eigenschaft vor dem SyntaxHighlighting zwischen speicherst? Könnte ich evtl. den Code mal sehen?

    Hi,
    Mit den Abspeichern habe ich dich falsch verstanden.
    Ich hatte es so versucht:

    VB.NET-Quellcode

    1. Dim txt as String = Richtextbox1.Text
    2. Richtextbox1.Clear()
    3. Richtextbox1.Text = txt

    Geht aber ned.
    Aber wenn ich den Text immer vor den Syntaxhighlighten speichere sind die Farben vom letzten Syntaxhighlit noch drin. Deshalb auch die untere Frage.
    Zu meiner ersten Frage:
    Ja klappt ja alles Super. Aber ich muss es trotztdem Selectieren um es einzufärben. Und der User sieht leider die Selektion.
    Mfg
    Mike
    Hi,
    Beispielsweise steht in der RTB "Hallo Welt" und noch nichts wurde angestrichen dann steht in der RTF Eigenschaft irgendwo mitten drin Hallo Welt. Außerdem müsste ich die Font selber ersetzen, die Schriftgröße und auch statt vbnewline irgendwie \line. Das ist ein ganz anderer Syntax.
    Mfg
    Mike
    die zeilenumbrüche würden ja dann schon drinne stehen(ist soweit ich weiß \par)
    und wo wäre denn das problem, das ganze selbst zu machen, außer, dass es viel viel schneller ist?!^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    jvbsl schrieb:

    die zeilenumbrüche würden ja dann schon drinne stehen(ist soweit ich weiß \par)
    und wo wäre denn das problem, das ganze selbst zu machen, außer, dass es viel viel schneller ist?!^^

    Angenommen ich mache es im Textchanged event so in etwa:

    VB.NET-Quellcode

    1. Me.Zwischenspeichern = Richtextbox1.RTF

    Jetzt enthält die Globale Variable Zwischenspeichern auch die Färbungen des vorherigen Matches (Syntaxhighliting).
    Wenn ich es aber vor allen Syntaxhighlitings mache dann weise ich der Richtextbox automatisch den StartText zu.
    Mfg
    Mike
    hmm das stimmt natürlich wiederum, da fällt mir nur eins ein, setz die RTF Eigenschaft auf nix und die TextEigenschaft wiederum anschließend auf den zwischengespeicherten(normalen) Text...bin mir aber nicht sicher, ob das funktioniert...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Hi,
    Nö nicht wirklich XD.
    Also hier mein Code:

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. Public Class Form1
    3. Dim Syntax As New List(Of Syntax)
    4. Dim match As Boolean = True
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. Syntax.Add(New Syntax("//.*?", Color.Green))
    7. End Sub
    8. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    9. If Not Syntax.Count = 0 Then
    10. If match Then
    11. Dim curpos As Integer = RichTextBox1.SelectionStart
    12. Reset()
    13. For Each Syntax As Syntax In Me.Syntax
    14. For Each Match As Match In Regex.Matches(RichTextBox1.Text, Syntax.Pattern, RegexOptions.Singleline)
    15. RichTextBox1.Select(Match.Index, Match.Length + Match.Value.Length)
    16. RichTextBox1.SelectionColor = Syntax.Color
    17. Next
    18. Next
    19. RichTextBox1.DeselectAll()
    20. RichTextBox1.SelectionStart = curpos
    21. End If
    22. End If
    23. End Sub
    24. Public Sub Reset()
    25. Dim txt As String = RichTextBox1.Text
    26. RichTextBox1.Rtf = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}""\viewkind4\uc1\pard\f0\fs17 xd\par}"
    27. match = False
    28. RichTextBox1.Text = txt
    29. End Sub
    30. End Class

    Und Syntax Klasse:

    VB.NET-Quellcode

    1. Public Class Syntax
    2. Public Pattern As String
    3. Public Color As Color
    4. Public Sub New(ByVal Pattern As String, ByVal Color As Color)
    5. Me.Pattern = Pattern
    6. Me.Color = Color
    7. End Sub
    8. End Class
    gut ichb werde dann gleich mal gucken, darauf nicht antworten, dann kann ich editieren ;)
    Edit:

    VB.NET-Quellcode

    1. Private defaultRTF As String = "{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}" & vbCrLf & _
    2. "\viewkind4\uc1\pard\f0\fs17\par" & vbCrLf & _
    3. "}" & vbCrLf
    4. Private oRtf As String
    5. Private Sub btnNoFormat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNoFormat.Click
    6. Dim txt As String = Me.rtf.Text
    7. oRtf = Me.rtf.Rtf
    8. Me.rtf.Rtf = defaultRTF
    9. Me.rtf.Text = txt
    10. End Sub
    11. Private Sub btnFormat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFormat.Click
    12. Me.rtf.Rtf = oRtf
    13. End Sub

    rtf = RichTextBox
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

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

    Hi,
    Danke das Klappt soweit super.
    Aber wenn ich nun folgendes mache:

    VB.NET-Quellcode

    1. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    2. If Not Syntax.Count = 0 Then
    3. If match Then
    4. Dim curpos As Integer = RichTextBox1.SelectionStart
    5. Button1.PerformClick()
    6. For Each Syntax As Syntax In Me.Syntax
    7. For Each Match As Match In Regex.Matches(RichTextBox1.Text, Syntax.Pattern, RegexOptions.Singleline)
    8. RichTextBox1.Select(Match.Index, Match.Length + Match.Value.Length)
    9. RichTextBox1.SelectionColor = Syntax.Color
    10. Next
    11. Next
    12. RichTextBox1.DeselectAll()
    13. RichTextBox1.SelectionStart = curpos
    14. match = True
    15. End If
    16. End If
    17. End Sub
    18. Public Sub Reset()
    19. Dim txt As String = Me.RichTextBox1.Text
    20. Me.RichTextBox1.Rtf = defaultRTF
    21. match = False
    22. Me.RichTextBox1.Text = txt
    23. End Sub

    Dann highlitet er aber nur // und die nächsten drei Buchstaben. :huh:
    VB kann schon mysteriös sein. XD
    Mfg
    Mike