Tipp 0202 RichTextBox-Text mit Links unterlegen
Autor/Einsender:
Datum:
  Thomas Becker
10.05.2010
Entwicklungsumgebung:   VB.Net 2005
Framework:   2.0
In einer RichTextBox kann nicht ein beliebiger Text mit einem Link unterlegt werden, so wie es bei Word oder dem Browser üblich ist. Wer diese Eigenschaft allerdings braucht, kommt um ein paar zusätzliche Codezeilen nicht herum. 
Die RichTextBox übermittelt mit GetCharIndexFromPosition den Textindex der Maus-Position. Aus diesem Index ermitteln wir Anfang und Ende eines Wortes und vergleichen es mit den Key-Einträgen des Dictionary. Ist dieser vorhanden, starten wir den Browser mit dem im Value abgelegten Link.
 
Public Class Form1
  Dim Links As New Dictionary(Of String, String)

  Private Sub Form1_Load(ByVal sender As Object, ByVal e As _
     System.EventArgs) Handles Me.Load
    With RichTextBox1
      .Cursor = Cursors.Default
      .DetectUrls = True

      ' Richtext in die RTB aus Ressource holen
      .Rtf = (My.Resources.Linktext)

      ' Wörter einem Link zuordnen
      Links.Add("vb-fun", "http://www.vb-fun.de/")
      Links.Add("Net-Forum", _
        "http://www.vb-fun.de/dotnet/forum/forum.shtml")

      ' Wörter als Links "einfärben"
      Dim Pos As Integer
      For Each KeyWort As String In Links.Keys
        Pos = -1
        Do
          Pos = .Text.IndexOf(KeyWort, Pos + 1)
          If Pos > -1 Then
            .SelectionStart = Pos
            .SelectionLength = KeyWort.Length
            .SelectionFont = New Font(.SelectionFont, _
              FontStyle.Underline)
            .SelectionColor = Color.Blue
          End If

        Loop Until Pos = -1
      Next
      ' Cursor wieder an den Anfang setzen
      .SelectionStart = 0
      .SelectionLength = 0
    End With
  End Sub

  Private Sub RichTextBox1_MouseDown(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.MouseEventArgs) _
      Handles RichTextBox1.MouseDown
    Dim Pos As Integer = _
        RichTextBox1.GetCharIndexFromPosition(e.Location)
    Dim myText As String = RichTextBox1.Text, idx As Integer = -1
    Dim PosPattern() As Char = _
        (" .?!""" & vbNewLine & vbTab).ToCharArray

    ' Positionen suchen
    Dim APos As Integer = _
        myText.LastIndexOfAny(PosPattern, Pos) + 1
    Dim EPos As Integer = myText.IndexOfAny(PosPattern, Pos) - 1
    If EPos = -2 Then EPos = myText.Length - 1
    If EPos > APos Then
      ' Wort unter Mauszeiger zuschneiden
      Dim Ziel As String = myText.Substring(APos, EPos - APos + 1)
      ' Wort in den Links? Wenn ja, Browser starten
      If Links.ContainsKey(Ziel) Then Process.Start(Links(Ziel))
    End If
  End Sub

  Private Sub RichTextBox1_LinkClicked(ByVal sender As Object, _
      ByVal e As System.Windows.Forms.LinkClickedEventArgs) _
      Handles RichTextBox1.LinkClicked
    ' Browserstart bei reinen Links
    Process.Start(e.LinkText)
  End Sub

  Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    Me.Close()
  End Sub
End Class
 
Weitere Links zum Thema
Links aus Website auslesen

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (14 kB) Downloads bisher: [ 208 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Montag, 16. Januar 2012