| |
VB.NET - Ein- und UmsteigerTexteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Scrypton | Datum: 08.04.14 22:57 |
| Guten Abend,
ich habe mit Visual Basic erst vor kurzer Zeit angefangen und wollte einen BBCode-Editor umsetzen, welcher die Texteingaben und dessen Formatierung in einer RichEditBox live in einer zweiten, einfachen Textbox im BBCode-Format wiedergibt, während man am Schreiben ist.
Beispiel; aus:
Das [u]ist ein Beispiel.
Wird
Das [u]ist ein Beispiel. Mein momentaner Stand ist folgender:
Public Class Form1
Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button6.Click
If rtbEdit.SelectionFont IsNot Nothing Then
Dim currentFont As System.Drawing.Font = rtbEdit.SelectionFont
Dim newFontStyle As System.Drawing.FontStyle
If rtbEdit.SelectionFont.Bold = True Then
newFontStyle = FontStyle.Regular
TextBox1.AppendText("[./b]")
rtbEdit.Focus()
Else
newFontStyle = FontStyle.Bold
TextBox1.AppendText("[.b]")
rtbEdit.Focus()
End If
rtbEdit.SelectionFont = New Font( _
currentFont.FontFamily, _
currentFont.Size, _
newFontStyle _
)
End If
End Sub
End Class Wird der Button betätigt, wird in der RichEditBox die Schrift auf Bold gestellt und in der TextBox erscheint [.b], bei zweiter betätigung wird Bold deaktiviert und in der TextBox erscheint [./b].
Wie jedoch bringe ich die Texteingaben in die TextBox?
Ein "TextBox1.Text = rtbEdit.Text" bringt mir nichts, da dann bei jeder Änderung der Formatierung die vorhergehenden BBCodes verscheinden.
Kann mir einer helfen, wie man da am besten ansetzen sollte?
Danke und liebe Grüße,
Scry
Beitrag wurde zuletzt am 08.04.14 um 22:59:21 editiert. | |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Manfred X | Datum: 09.04.14 09:18 |
| Hallo!
Du mußt - bei jeder Änderung in der RTF-Box - die BB-Codes zu den
entsprechenden RTF-Codes im RTF-Text ermitteln und sie an der korrekten
Stelle im unformatierten Text einfügen.
| |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Scrypton | Datum: 09.04.14 13:55 |
| Hallo Manfred,
wie ist in dem RTF-Text der RTF-Code zu ermitteln?
Also; wie ermittle ich, wann die Schrift farbig bzw. auf Bold gesetzt ist?
Und: Wie füge ich in einem Text an einer bestimmten Position einen weiteren Inhalt ein?
Liebe Grüße,
Scry | |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Manfred X | Datum: 09.04.14 14:11 |
| Hallo!
[B]Das ist keine triviale Aufgabe.[/B]
Am besten Du suchst im Netz, ob es bereits einen Konverter für
einen Subset der RTF-Codes in BBCode gibt.
Ansonsten mußt Du Dir die RTF-Codes anschauen:
http://www.biblioscape.com/rtf15_spec.htm
Da RTF ASCII-Text mit Attributen ist, kannst Du ihn
auf eine String-Variable zuweisen und sukzessive mit einer
IndexOf-Überladung ab einem Startindex nach der Position der Tags suchen.
Zum Einfügen der korrespondierenden BBCodes würde ich einen StringBuilder verwenden,
der den reinen Text enthält (Insert-Methode).
| |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Scrypton | Datum: 09.04.14 15:18 |
| Hallo Manfred,
danke für deine Antworten.
Einen Konverter habe ich auf die Schnelle nicht gefunden, kann aber ohnehin erst heute Abend wieder weiter machen wenn ich zuhause bin. Momentan stecke ich noch in der Arbeit fest.
Mit welcher Funktion ich den Text nach RTF-Codes durchsuche ist mir noch immer nicht klar.
Bold wird z.B. mit \b aktiviert und wieder deaktiviert mit \b0
Ich weiß jedoch nicht, wie ich wo danach suchen/selektieren kann.
Liebe Grüße,
Scry | |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Manfred X | Datum: 10.04.14 11:52 |
| Die Konvertierung ist einfacher, wenn Du den umgekehrten Weg gehst,
also die BBCode-Textattribute in eine Textbox eingibst und sie in
einer RTF-Box entsprechend anzeigen läßt.
Als kleines Beispiel habe ich das für die Fontstyle-Attribute
Fett, Kursiv, Unterstreichen und Durchstreichen programmiert.
Public Class frmBBCode
Dim tbo As New TextBox With _
{.Parent = Me, .Width = 300, .Height = 300, .Multiline = True}
Dim WithEvents btnConvert As New Button With _
{.Parent = Me, .Width = 100, .Height = 30, .Top = 330, _
.Text = "Konvertieren"}
Dim rbo As New RichTextBox With _
{.Parent = Me, .Width = 300, .Height = 300, .Top = 380}
Private Sub frmBBCode_Load(sender As System.Object, _
e As System.EventArgs) Handles MyBase.Load
Me.MinimumSize = New Size(350, 700)
End Sub
Private Sub btnConvert_Click(sender As Object, _
e As System.EventArgs) Handles btnConvert.Click
Dim attributes As String = "bius"
Dim area As Point = Nothing, startindex As Integer
Dim fs As FontStyle
With rbo
.Text = tbo.Text
'Schleife über die unterstützten Attribute
For i As Integer = 0 To attributes.Length - 1
startindex = 0
Do
'Suche nach nächstem Text-Bereich den das Attribut
' umschließt
area = FindArea(.Text, startindex, attributes(i))
If Not area = Nothing Then
'BBCode aus dem RichText entfernen
.SelectionStart = area.X
.SelectionLength = 3
.SelectedText = ""
.SelectionStart = area.X + area.Y - 4
.SelectionLength = 4
.SelectedText = ""
'zeichenweise das FontStyle-Attribut einfügen
For k As Integer = area.X To area.X + area.Y - 5
.SelectionStart = k
.SelectionLength = 1
fs = .SelectionFont.Style
Select Case attributes(i)
Case Is = "b"c
fs = fs Or FontStyle.Bold
Case Is = "i"c
fs = fs Or FontStyle.Italic
Case Is = "u"c
fs = fs Or FontStyle.Underline
Case Is = "s"c
fs = fs Or FontStyle.Strikeout
End Select
.SelectionFont = New Font(.Font.Name, .Font.Size, _
fs)
Next k
startindex = area.X + area.Y
End If
Loop While Not area = Nothing And startindex < .Text.Length
Next i
End With
End Sub
Private Function FindArea(ByVal text As String, _
ByVal startindex As Integer, _
ByVal Attribute As String) As Point
Dim start, ende As Integer
Try
start = text.ToLower.IndexOf("[" & Attribute & "]", startindex)
If start = -1 Then Return Nothing
ende = text.ToLower.IndexOf("[/" & Attribute & "]", start + 2)
If ende = -1 Then Return Nothing
Return New Point(start, ende - start + 1)
Catch
Return Nothing
End Try
End Function
End Class | |
Re: Texteingaben in zweiter Textbox übernehmen (BBCode-Editor) | | | Autor: Manfred X | Datum: 10.04.14 12:54 |
| Sorry. Eine Zeile muß geändert werden, nämlich so:
startindex = area.X + area.Y - 7 (Die bearbeiteten Tags sind entfernt worden.)
| |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevAniGif (VB/VBA)
Anzeigen von animierten GIF-Dateien
Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Weitere Infos
|