Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Parse testo formattato in richtextbox
Forum - C# / VB.NET - [VB.NET] Parse testo formattato in richtextbox

Avatar
Renny (Normal User)
Expert


Messaggi: 231
Iscritto: 30/07/2011

Segnala al moderatore
Postato alle 16:33
Domenica, 16/10/2011
Ciao a tutti. Nel mio programma avrei la necessità di permettere all'utente di inserire del testo (3,4 righe). Avevo pensato usare una richtextbox, in modo da offrire un minimo di formattazione (grassatto, corsivo, sottolineato) al testo.
Ho fatto un po' di prove ho uso questo codice per settare il grassetto; funziona sia per testo selezionato sia per settare il grassetto dal cursore "in avanti".
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.         Dim CurrentFont As Font = rtfBox.SelectionFont
  3.         If CurrentFont.Bold = True Then
  4.             rtfBox.SelectionFont = New Font(rtfBox.Font, FontStyle.Regular)
  5.         Else
  6.             rtfBox.SelectionFont = New Font(rtfBox.Font, FontStyle.Bold)
  7.         End If
  8.     End Sub


E' questa la modalità migliore? O ci sono comandi specifici?
Ho notato una cosa: negli editor "decenti", quando il cursore si sposta nel testo in grassetto, il TASTO "grassetto" diventa evidenziato, per sottolineare che il testo, dov'è il cursore è formattato. Come si potrebbe fare per ottenere lo stesso effetto? Dovrei gestire tutti gli eventi che agiscono sulla posizione del cursore? e .. poi? E' fattibili, senza sprecare tante risorse? Sennò quello è un dettaglio trascurabile..8-|
Poi, il testo inserito lo volevo salvare in un database, ma quello è facile, salvo la stringa rtf con i suoi tags. Più difficile invece è stampare il testo. Nel mio programma uso questa libreria, davvero ottima devo dire: http://www.pdfsharp.net/MigraDocOverview.ashx
Per inserire del testo formattato pasta usare la funzione:
Codice sorgente - presumibilmente Plain Text

  1. paragraph.AddFormattedText("bold", TextFormat.Bold)


Quindi, per fare questo devo avere prima il testo inserito nella richtextbox pulito di tutti i tags eccetto quelli relativi alla formattazione che mi interessa...
Devo larorare di regex, mi sa.. Mo mi metto a studiare un po' sta cosa.
Voi avete suggerimenti?:-| :heehee:
Ciao Grazie!


In attesa della fine del mondo, fissata per l'anno prossimo, sono alla ricerca di un notaio con cui fare testamento...
PM
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 21:36
Domenica, 16/10/2011
Per mostrare i tasti evidenziati, basta leggere le proprietà Bold, Italic e Underlined della proprietà SelectionFont della RichTextBox ad ogni evento SelectionChanged e impostare le proprietà Checked dei pulsanti di conseguenza; per la stampa è più facile usare un PrintDocument e una PrintDialog: dai un'occhiata qui http://msdn.microsoft.com/it-it/library/system.drawing.pri ....

Ciao. ok, l'evento è selectionChanged... Per quanto riguarda la stampa, io ho già preparato altre pagine pdf da stampare. Al momento sto lavorando su una funzione parser per ripulire il codice rtf di tutti i tag che non gestisco e lascio quelli relativi alla formattazione che interessa a me..Grazie - Renny - 16/10/11 22:53
Ok allora, per pulire il testo ho pensato di fare così: con questa regex "{*\\[a-z0-9]*{*}*" intercetto tutti i tag e le {. Poi faccio un for each con tutti i match catturati e se non sono tag tipo \b e \b0 faccio replace sulla stringa, sostituendo i tag inutili con "". Come vi sembra? - Renny - 16/10/11 23:15
Se funziona, mi sembra ottima. - GN - 17/10/11 21:25
Certo che funziona.. fai di tutto. Anche tabelle che si distribuiscono su più pagine in base alla lunghezza. E sono 2 librerie gratuite e perfettamente distribuibili.. Non è mica poco, fare report in pdf. Certo, bisogna star li a disegnare e posizionare le cose, però poi va a meraviglia. - Renny - 17/10/11 22:06


PM