Hey,
Ich entwickle zwar keine HTML-Editoren, aber vielleicht hilft das dem ein oder anderen hier.
Bis jetzt sind es nur zwei Tipps (habe aber vor, noch mehr zu veröffentlichen), der erste fügt nach einem '=' automatisch '"Wert"' ein, der andere fügt nach einem eingegebenen Starttag automatisch den zugehörigen Endtag ein.
Außerdem ist eine Methode enthalten, mit der man aus z.B. <Tag ...> den Namen auslesen kann.
Das ganze ist so geschrieben, dass man statt '<' bspw. auch '[' verwenden kann, usw.
Also hier der Code:
Benötigt wird eine TextBox mit dem Namen 'MainTextBox' oder man ändert ggf. den Namen ab.
Ich hoffe, jemand kann den gebrauchen
Ich entwickle zwar keine HTML-Editoren, aber vielleicht hilft das dem ein oder anderen hier.
Bis jetzt sind es nur zwei Tipps (habe aber vor, noch mehr zu veröffentlichen), der erste fügt nach einem '=' automatisch '"Wert"' ein, der andere fügt nach einem eingegebenen Starttag automatisch den zugehörigen Endtag ein.
Außerdem ist eine Methode enthalten, mit der man aus z.B. <Tag ...> den Namen auslesen kann.
Das ganze ist so geschrieben, dass man statt '<' bspw. auch '[' verwenden kann, usw.
Also hier der Code:
VB.NET-Quellcode
- ' Die Konstanten für die Tagerkennung
- Private Const TagStartString As String = "<"
- Private Const TagEndString As String = ">"
- ' Dieses Event wird ausgeführt, wenn der Text in der MainTextBox geändert wird.
- Private Sub MainTextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MainTextBox.TextChanged
- Dim p As Integer = MainTextBox.SelectionStart ' Den Start der Markierung bzw. die Position des Cursors in eine Variable speichern
- Dim sBef As String = MainTextBox.Text.Substring(0, p) ' Den Text vor der Cursorposition speichern
- Dim sAft As String = MainTextBox.Text.Substring(p, MainTextBox.Text.Length - p) ' Den Text nach der Cursorposition speichern
- If (sBef.EndsWith("=")) Then ' Wenn der Text vor der Cursorposition mit '=' beginnt, dann...
- MainTextBox.Text = sBef + """Wert""" + sAft ' ...füge zwischen dem Text vor und nach der Cursorposition '"Wert"' ein...
- MainTextBox.SelectionStart = p + 1 ' ...und setze die Markierung auf den eben eingefügten Text
- MainTextBox.SelectionLength = 4
- End If
- If (sBef.EndsWith(TagEndString) And sBef.Contains(TagStartString)) Then ' Wenn der Text vor der Cursorposition mit '>' endet und '<' enthält
- Dim s() As String = Split(sBef, TagStartString) ' Den Text vor der Cursorposition durch '<' teilen
- Dim tagStr = TagStartString + s(s.Length - 1) ' in tagStr wird gespeichert: '<' + den letzten Teil der obigen Zeile
- If (Not GetTagName(tagStr).StartsWith("/")) Then ' Nur, wenn der vermeintliche Tag kein Endtag ist
- If (GetTagName(tagStr).Length = 0) Then ' Wenn der Tagname aus null Zeichen besteht...
- Debug.WriteLine("Syntax Fehler: Position " + p.ToString()) ' ...schreibe einen Fehler in das Ausgabefenster...
- Exit Sub ' ...und brich das Event ab
- End If
- MainTextBox.Text = sBef + "Inhalt" + TagStartString + "/" + GetTagName(tagStr) + TagEndString + sAft ' Falls jedoch das eben eingegebene doch ein Starttag sein sollte, Endtag einfügen
- MainTextBox.SelectionStart = p ' Alte Position wiederherstellen
- MainTextBox.SelectionLength = 6 ' Markierung auf 'Inhalt' legen
- End If
- End If
- End Sub
- Public Function GetTagName(ByVal S As String) As String ' S muss beispielsweise so aufgebaut sein: '<Tagname ...>'
- Dim result As String = S
- If (S.StartsWith(TagStartString) And S.EndsWith(TagEndString)) Then ' Wenn S mit '<' anfängt und mit '>' aufhört, dann ist es ein Tag
- result = Split(result.Remove(0, 1).Remove(result.Length - 2, 1))(0) ' Tagname herausfiltern
- End If
- Return result ' Tagname zurückgeben
- End Function
- Public Sub TransFormTagString(ByVal NewTagStart As String, ByVal NewTagEnd As String) ' Neue Tagzeichen setzen
- MainTextBox.Text = MainTextBox.Text.Replace(TagStartString, NewTagStart).Replace(TagEndString, NewTagEnd) ' Die Tagzeichen durch neue ersetzen
- End Sub
Benötigt wird eine TextBox mit dem Namen 'MainTextBox' oder man ändert ggf. den Namen ab.
Ich hoffe, jemand kann den gebrauchen