Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB2005, VB2008 | 22.07.08 |
Intellisense in der RichTextBox Realisierung einer einfachen Intellisense-Funktion für das RichTextBox-Control. | ||
Autor: Brian Schwartz | Bewertung: | Views: 15.478 |
www.proversys.net | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Unser heutiger Tip zeigt Ihnen in einem ganz einfachen Beispiel, wie Sie eine Intellisense-Funktion für die RichTextBox erstellen können.
Einsatzmöglichkeiten herfür bieten zum Beispiel ein HTML-Editor, Textvorlagen für ein eMail-Programm und noch viele andere Dinge mehr.
Das Beispiel ist um ein vielfaches ausbaubar und bei weitem nicht vollständig. Eine Idee wäre zum Beispiel noch was passiert, wenn jemand die Taste "#" in der RTB drückt, dann aber doch keine Vorlage haben möchte...
Erstellen Sie ein neues Windows-Forms-Projekt, platzieren auf die Form ein RichTextBox-Control und ein ListBox-Control und fügen nachfolgenden Code in den Codeteil der Form ein:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Hinzufügen von Einträgen in der ListBox With ListBox1.Items .Insert(0, "VB@rchiv") .Insert(1, "Briefanrede") .Insert(2, "Briefabschluss") .Insert(3, "Datum und Uhrzeit") .Insert(4, "Irgend ein Text...") End With ' Listbox ausblenden ListBox1.Visible = False End Sub
Private Sub RichTextBox1_KeyPress(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles RichTextBox1.KeyPress ' Wenn Taste # gedrückt If e.KeyChar = "#" Then ' ListBox soll unmittelbar unter dem zuletzt ' eingegbenen Zeichen erscheinen With RichTextBox1 ListBox1.Left = .GetPositionFromCharIndex( _ .SelectionStart).X + .Left + 10 ListBox1.Top = .GetPositionFromCharIndex( _ .SelectionStart).Y + .Top + 20 ' Jetzt ListBox einblendenden, Focus auf diese setzen ' und den ersten Eintrag selektieren ListBox1.Visible = True ListBox1.Focus() ListBox1.SelectedIndex = 0 End With End If End Sub
Private Sub ListBox1_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ListBox1.KeyPress ' Wurde die Entertaste in der ListBox gedrückt? If Asc(e.KeyChar) = Keys.Enter Then With RichTextBox1 Dim strTag As String = ListBox1.SelectedItem ' Auswerten des Eintrages der ListBox und ' Umwandlung in den entsprechenden Wert der ' in die RTB eingefügt werden soll Select Case strTag Case "VB@rchiv" strTag = "vbarchiv.net" Case "Briefanrede" strTag = "Sehr geehrter Benutzer," Case "Briefabschluss" strTag = "Mit besten Wünschen," Case "Datum und Uhrzeit" strTag = Now() Case "Irgend ein Text..." strTag = "Irgend ein Text..." Case Else strTag = "" End Select ' Das "Steuerzeichen" # ersetzen durch einen NullString .Text = Replace(.Text, "#", vbNullString) & strTag ' wo soll der Cursor nach dem Einfügen in der RTB stehen? .SelectionStart = .TextLength ' Listbox wieder auf den ersten Eintrag setzen ' und ausblenden ListBox1.SelectedItem = 0 ListBox1.Visible = False ' Focus wieder auf RTB setzen .Focus() End With End If End Sub
End Class