Hey,
in diesem Tutorial möchte ich euch zeigen, wie ihr mit dem Digitalrune TextEditorControl IntelliSense bekommt. Wer nicht weiß, was IntelliSense ist, *klick*
Ihr braucht als erstes das TexteditorControl, hier ist ein Tutorial, wie ihr es bekommt. Als nächstes ziehen wir das Control in unsere Toolbox (HowTo ) und ziehen es anschließend auf unsere Form. Ich benenne das "TextEditorControl1" noch in "TextEditor" um. Danach gehen wir in die Code-Ansicht. Als erstes OPTION STRICT ON. Danach brauchen wir ein paar Imports:
Dann erstellen wir eine neue, öffentliche Klasse. Meine heißt "CodeCompletionDataProvider"
Wir erben von "AbstractCompletionDataProvider", also kommt in die erste Zeile unsere Klasse:
Wir erstellen uns eine ImageList, wo die Icons der Methoden/Eigenschaften reinkommen. Ein paar davon könnt ihr unten downloaden.
Danach erstellen wir eine neue Property, wo wir die ImageList zurückgeben:
Jetzt müssen wir noch Bilder der Imagelist hinzufügen, das machen wir in der Sub New.
Als nächstes erstellen wir eine neue Function, das Herz unserer IntelliSense:
Wir erstellen eine neue Variable, unser Rückgabewert:
Jetzt können wir ganz einfach mit
Zur Erklärung:
Wir erstellen eine neue DefaultCompletionData. Als Parameter müssen wir einmal den Text (Bsp: Messagebox) und dann die Beschreibung (Bsp: Zeigt eine MessageBox an) übergeben. Außerdem müssen wir noch den Index des Images, welches wir als Icon haben wollen, angeben.
Wenn wir viele Einträge hinzufügen wollen, könnt ihr auch folgendes schreiben:
Außerdem können wir noch Snippets hinzufügen:
Im ersten Parameter bei new Snippet geben wir den Aufruf an (wie Text bei DefaulData...). Danach sagen wir, wie es nach eine Bestätigung aussieht. | ist die Postion des Cursors (Man macht den Strich mit Alt Gr und "<"). Als letzten Parameter bei New Snippet geben wir die Beschreibung an. Bei New SnippetCompletionData geben wir als ersten Parameter den Snippet und als zweiten den Index des Bildes in der _ImageList an. Wenn ihr viele Snippets hinzufügen wollt, bietet sich folgende Lösung an:
Als letztes geben wir noch unsere List Of zurück und sind dann auch fertig mit der Klasse:
Als nächstes gehen wir wieder in unsere Klasse der Form und rufen das Event "CompletionRequest" vom TextEditorControl auf:
Da schreiben wir folgendes rein:
Jetzt funktioniert das ganze. Danke fürs lesen, ich freue mich über Rückmeldung.
Download von einem Beispielprojekt
Download von ein paar Icons
Download von einer Anwendung, die die IntelliSense nutzt (Die Datei vom Projekt)
Das ganze mal in einem Stück:
Spoiler anzeigen
in diesem Tutorial möchte ich euch zeigen, wie ihr mit dem Digitalrune TextEditorControl IntelliSense bekommt. Wer nicht weiß, was IntelliSense ist, *klick*
Ihr braucht als erstes das TexteditorControl, hier ist ein Tutorial, wie ihr es bekommt. Als nächstes ziehen wir das Control in unsere Toolbox (HowTo ) und ziehen es anschließend auf unsere Form. Ich benenne das "TextEditorControl1" noch in "TextEditor" um. Danach gehen wir in die Code-Ansicht. Als erstes OPTION STRICT ON. Danach brauchen wir ein paar Imports:
Dann erstellen wir eine neue, öffentliche Klasse. Meine heißt "CodeCompletionDataProvider"
Wir erben von "AbstractCompletionDataProvider", also kommt in die erste Zeile unsere Klasse:
Wir erstellen uns eine ImageList, wo die Icons der Methoden/Eigenschaften reinkommen. Ein paar davon könnt ihr unten downloaden.
Danach erstellen wir eine neue Property, wo wir die ImageList zurückgeben:
Jetzt müssen wir noch Bilder der Imagelist hinzufügen, das machen wir in der Sub New.
Als nächstes erstellen wir eine neue Function, das Herz unserer IntelliSense:
Wir erstellen eine neue Variable, unser Rückgabewert:
Jetzt können wir ganz einfach mit
completionData.Add
Einträge hinzufügen:Zur Erklärung:
Wir erstellen eine neue DefaultCompletionData. Als Parameter müssen wir einmal den Text (Bsp: Messagebox) und dann die Beschreibung (Bsp: Zeigt eine MessageBox an) übergeben. Außerdem müssen wir noch den Index des Images, welches wir als Icon haben wollen, angeben.
Wenn wir viele Einträge hinzufügen wollen, könnt ihr auch folgendes schreiben:
Außerdem können wir noch Snippets hinzufügen:
Im ersten Parameter bei new Snippet geben wir den Aufruf an (wie Text bei DefaulData...). Danach sagen wir, wie es nach eine Bestätigung aussieht. | ist die Postion des Cursors (Man macht den Strich mit Alt Gr und "<"). Als letzten Parameter bei New Snippet geben wir die Beschreibung an. Bei New SnippetCompletionData geben wir als ersten Parameter den Snippet und als zweiten den Index des Bildes in der _ImageList an. Wenn ihr viele Snippets hinzufügen wollt, bietet sich folgende Lösung an:
VB.NET-Quellcode
- Dim snippets As New List(Of Snippet)() From {New Snippet("For", "For i As Integer = 0 To Bla.Count -1" & Environment.NewLine & "|" & Environment.NewLine & "Next", "Eine Schleife"), _
- New Snippet("Do", "Do While 1 > 9" & Environment.NewLine & "|" & Environment.NewLine & "Loop", "Endlosschleife")}
- For Each snippet As Snippet In snippets
- completionData.Add(New SnippetCompletionData(snippet, 1))
- Next
Als letztes geben wir noch unsere List Of zurück und sind dann auch fertig mit der Klasse:
Als nächstes gehen wir wieder in unsere Klasse der Form und rufen das Event "CompletionRequest" vom TextEditorControl auf:
Da schreiben wir folgendes rein:
Jetzt funktioniert das ganze. Danke fürs lesen, ich freue mich über Rückmeldung.
Download von einem Beispielprojekt
Download von ein paar Icons
Download von einer Anwendung, die die IntelliSense nutzt (Die Datei vom Projekt)
Das ganze mal in einem Stück:
VB.NET-Quellcode
- Option Strict On
- Imports DigitalRune.Windows.TextEditor.Completion
- Imports DigitalRune.Windows.TextEditor
- Public Class frm_main
- Private Sub CompletitionRequest(ByVal sender As Object, ByVal e As CompletionEventArgs) Handles TextEditor.CompletionRequest
- Dim xCom As New CodeCompletionDataProvider()
- If e.Key = vbNullChar Then
- TextEditor.ShowCompletionWindow(xCom, e.Key, False)
- End If
- If Char.IsLetter(e.Key) Then
- Try
- TextEditor.ShowCompletionWindow(xCom, e.Key, True)
- Catch ex As Exception
- End Try
- End If
- End Sub
- End Class
- Public Class CodeCompletionDataProvider
- Inherits AbstractCompletionDataProvider
- Private _imageList As New ImageList
- Public Overrides ReadOnly Property ImageList() As ImageList
- Get
- Return _imageList
- End Get
- End Property
- Public Sub New()
- _imageList.Images.Add(My.Resources.field)
- _imageList.Images.Add(My.Resources.method)
- _imageList.Images.Add(My.Resources.TextFile)
- End Sub
- Public Overrides Function GenerateCompletionData(fileName As String, textArea As TextArea, charTyped As Char) As ICompletionData()
- Dim completionData As New List(Of ICompletionData)() From { _
- New DefaultCompletionData("MessageBox", "Igendso ne Nachrichtenbox.", 0), _
- New DefaultCompletionData("MsgBox", "Es gibt da was neueres, ne MessageBox.", 0), _
- New DefaultCompletionData("Dim", "Zum deklarieren von Datentypen.", 0), _
- New DefaultCompletionData("String", "Ne Zeichenkette", 0)}
- Dim snippets As New List(Of Snippet)() From {New Snippet("For", "For i As Integer = 0 To Bla.Count -1" & Environment.NewLine & "|" & Environment.NewLine & "Next", "Eine Schleife"), _
- New Snippet("Do", "Do While 1 > 9" & Environment.NewLine & "|" & Environment.NewLine & "Loop", "Endlosschleife")}
- For Each snippet As Snippet In snippets
- completionData.Add(New SnippetCompletionData(snippet, 1))
- Next
- Return completionData.ToArray()
- End Function
- End Class
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VincentTB“ ()