Ecco un'estensione dell'idea di H.B. che funziona sia con il testo che con le immagini.
Ho trovato che la differenza è sempre> 4 ogni volta che l'RTB ha testo. Tuttavia, se si incolla solo un'immagine è 3. Per combatterla, osservo la lunghezza della stringa raw rtf.
var start = Document.ContentStart;
var end = Document.ContentEnd;
var difference = start.GetOffsetToPosition(end);
HasText = difference > 4 || GetRtfText().Length > 350;
public string GetRtfText()
{
var tr = new TextRange(Document.ContentStart, Document.ContentEnd);
using (var ms = new MemoryStream())
{
tr.Save(ms, DataFormats.Rtf);
return Encoding.Default.GetString(ms.ToArray());
}
}
Attraverso il mio test ho trovato che una scatola vuota, senza caratteri ha una lunghezza di 270. Se ho anche incollare in un'immagine che è solo 1 pixel in termini di dimensioni che palloncini per 406.
ho giocato con passare su varie opzioni di formattazione senza digitare alcuna lettera e non sono arrivati a 300, quindi sono andato con 350 per la linea di base.
Il controllo della lunghezza può essere costoso se non ci sono caratteri testuali, ma sono incollati in un'immagine massiccia.
fonte
2017-10-19 23:26:25
Il conteggio è uno anche se il RichTextBox è vuoto. –
Hmm, questo ha davvero senso ... –
Ho modificato la mia risposta per mostrare un altro approccio, è un po 'strano però. –