![]() |
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
| |
|
|
|
Windows-Version |
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
|
Download (14
kB)
|
Downloads bisher: [ 208 ]
|
|
|