Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VB.NET 2010, Richtextbox während Eingabe formatieren

Frage Entwicklung Visual Studio

Mitglied: emeriks

emeriks (Level 4) - Jetzt verbinden

10.04.2012 um 15:54 Uhr, 7927 Aufrufe, 2 Kommentare

Ich will mir im VB.Net 2010 eine Richtextbox so einrichten, dass schon während der Eingabe bestimmte Wörter hervorgehoben werden, z.B. die Schriftfarbe. Ich bekomme das auch hin, über "TextChanged" und "SelectionColor". Der Faulheit halber lasse ich aber jedesmal den gesamten Inhalt prüfen und formatieren. Die erwartete Textmenge ist so groß nicht sodass das flott geht, auch wenn der Text mal ein paar Zeilen scrollen muss. Aber genau da hakt es. Jedesmal flimmert die Box, weil er jedesmal den Text nach unten durchscrollt und dann wieder an die Eingabestelle zurück springt.

Ich suche jetzt nach einem Weg, ihn davon abzuhalten, beim Durchlaufen des Texts jedesmal die Boax zu scrollen.

Ein einfaches Formular mit einer Richtextbox namens "rtb".

01.
  Private Sub rtb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rtb.TextChanged 
02.
    Try 
03.
      'Merken der aktuellen Cursor-Position 
04.
      Dim CursorPosition As Long = rtb.SelectionStart 
05.
      'Die hervorzuhebende Phrase 
06.
      Dim Phrase = "Hallo" 
07.
      'Die aktuelle Suchposition 
08.
      Dim p As Int32 = 0 - Phrase.Length 
09.
      Do 
10.
        'Das nächste Vorkommen der Phrase suchen 
11.
        p = rtb.Text.IndexOf(Phrase, p + Phrase.Length) 
12.
        If p >= 0 Then 
13.
          rtb.SelectionStart = p 
14.
          rtb.SelectionLength = Phrase.Length 
15.
          rtb.SelectionColor = Color.Red 
16.
          'Application.DoEvents() 
17.
        End If 
18.
      Loop While p >= 0 
19.
      rtb.SelectionStart = CursorPosition 
20.
      rtb.SelectionLength = 0 
21.
 
22.
    Catch ex As Exception 
23.
      'ignoriert 
24.
    End Try 
25.
  End Sub 
26.
 
Das geht doch sicher viel eleganter, oder?
Mitglied: mrtux
10.04.2012 um 16:18 Uhr
Hi !

Nur eine blöde Idee aus dem Stand heraus und besonders elegant ist die leider auch nicht aber probier doch mal wie es aussieht, wenn Du den gesamten Text in eine zweite Box schiebst (die nur im Speicher existiert bzw. unsichtbar ist), ihn dort formatierst und dann wieder in die erste Box zurückschreibst. Natürlich musst Du während die Formatiervorgang läuft, die sichtbare Box vor Änderungen schützen und den Schutz danach wieder aufheben, am besten mit dem Ende des Try Blocks.

mrtux
Bitte warten ..
Mitglied: emeriks
10.04.2012 um 16:33 Uhr
Ja, nee is klar ....

Nicht elegant aber das Ergebnis zählt! geht super! Danke!

Ich erstelle zur Laufzeit eine Hilfsbox, kopiere den RTF-Inhalt rüber, formatiere und kopiere zurück.

01.
    Dim rtb2 As RichTextBox = New RichTextBox 
02.
    rtb2.Rtf = rtb.Rtf 
03.
 
04.
    ....... 
05.
 
06.
    rtb.rtf = rtb2.rtf 
07.
    rtb.SelectionStart = CursorPosition 
08.
    rtb.SelectionLength = 0
Jetzt muss ich das nur noch ein bißchen intelligenter aufbauen, damit der mir auch die Formate wieder raus nimmt, wenn man nachträglich ändert ...
Bitte warten ..
Ähnliche Inhalte
Basic
gelöst Mit vb.net PDF in Word-Dok einfügen (10)

Frage von ahstax zum Thema Basic ...

Google Android
gelöst Android: PIN-Eingabe ohne Bestätigung (7)

Frage von honeybee zum Thema Google Android ...

Batch & Shell
Excel mit Powershell formatieren (13)

Frage von Tastuser zum Thema Batch & Shell ...

Visual Studio
Srv records aus dem dns abfragen unter vb.net (14)

Frage von Herbrich19 zum Thema Visual Studio ...

Neue Wissensbeiträge
Windows Tools

Zeit für Energiesparmodus, Bildschirmabschaltung etc. schnell anpassen

Anleitung von hannsgmaulwurf zum Thema Windows Tools ...

Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(4)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Heiß diskutierte Inhalte
Microsoft Office
Office Druck fehler (18)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Windows Server
Zertifikat am DC erneuern funktioniert nicht (13)

Frage von takvorian zum Thema Windows Server ...