none
Incollare testo RTF RRS feed

  • Domanda

  • Salve, vorrei sapere come si può incollare in un RichTextBox testo in modo che preservi la formattazione. Mi spiego meglio, avendo un RichTextBox1 voglio copiare il testo compresa l'informazione della formattazione, tuttavia con Copy non va perché prende solo la proprietà Text e non considera l'Rtf; poi voglio incollare tale testo formattato in un RichTextBox2: stesso discorso, avendo usato Copy o Clipboard, Paste incolla testo semplice perdendo tutta la formattazione. Provando invece a copiare con Ctrl+C qualsiasi testo formattato (p.es. scritto in WordPad), Paste funziona perfettamente.  E' possibile quindi incollare così.. ma a livello di codice quale sintassi devo adoperare? 
    sabato 15 settembre 2012 00:26

Risposte

  • Siccome in questi forum in passato ho ottenuto utili suggerimenti (come utente con altro nome), espongo la soluzione al problema che ho formulato sperando che possa servire a chi dovesse essere alle prese con i miei stessi dubbi.

    'Creazione di una istanza DataFormats.Format tramite il metodo GetFormat che

    restituisce un oggetto DataFormats.Format con il nome e l'ID numerico degli

    Appunti di Windows. Dim myFormat As DataFormats.Format = DataFormats.GetFormat(DataFormats.Rtf) 'Testo che precede l'incollamento in RTB2 RichTextBox2.Text = "qualche testo" 'Copia negli Appunti del testo formattato presente in RTB1 Clipboard.SetData(DataFormats.Rtf, RichTextBox1.Rtf) 'N un numero intero, indica la posizione di inserimento nella RichTextBox RichTextBox2.SelectionStart = N 'Incolla in RTB2 del testo formattato presente negli Appunti RichTextBox2.Paste(myFormat)


    Spiego brevemente la logica. Occorre fare riferimento alla classe DataFormats.Format allo scopo di specificare in Paste il formato del testo che si intende passare alla RichTextBox; per questo verrà definta una variabile (nell'esempio è "myFormat") di tale tipo. 

    Il secondo aspetto è l'utilizzo del metodo SetData della classe Clipboard. In esso andranno specificati due parametri: il formato (nell'esempio Rtf) e la fonte dei dati da archiviare sugli Appunti (nell'esempio RichTextBox1.Rtf: specificando la proprietà Rtf si impone che il trasferimento dei dati mantenga la formattazione).

    Per esempio, se RichTextBox2.Text = "Capitolo 1. " ("Capitolo 1. " può essere qualsiasi testo, semplice o formattato, p.es. "Capitolo 1. "), RichTextBox1 contiene un testo con la seguente formattazione:

    "Titolo argomento"

    e N = 12, il codice suesposto produrrà in RichTextBox2 il risultato:

    "Capitolo 1. Titolo argomento" (o "Capitolo 1. Titolo argomento").

    • Modificato FilippoTer sabato 15 settembre 2012 04:06
    • Contrassegnato come risposta FilippoTer lunedì 17 settembre 2012 01:59
    sabato 15 settembre 2012 03:01

Tutte le risposte

  • Siccome in questi forum in passato ho ottenuto utili suggerimenti (come utente con altro nome), espongo la soluzione al problema che ho formulato sperando che possa servire a chi dovesse essere alle prese con i miei stessi dubbi.

    'Creazione di una istanza DataFormats.Format tramite il metodo GetFormat che

    restituisce un oggetto DataFormats.Format con il nome e l'ID numerico degli

    Appunti di Windows. Dim myFormat As DataFormats.Format = DataFormats.GetFormat(DataFormats.Rtf) 'Testo che precede l'incollamento in RTB2 RichTextBox2.Text = "qualche testo" 'Copia negli Appunti del testo formattato presente in RTB1 Clipboard.SetData(DataFormats.Rtf, RichTextBox1.Rtf) 'N un numero intero, indica la posizione di inserimento nella RichTextBox RichTextBox2.SelectionStart = N 'Incolla in RTB2 del testo formattato presente negli Appunti RichTextBox2.Paste(myFormat)


    Spiego brevemente la logica. Occorre fare riferimento alla classe DataFormats.Format allo scopo di specificare in Paste il formato del testo che si intende passare alla RichTextBox; per questo verrà definta una variabile (nell'esempio è "myFormat") di tale tipo. 

    Il secondo aspetto è l'utilizzo del metodo SetData della classe Clipboard. In esso andranno specificati due parametri: il formato (nell'esempio Rtf) e la fonte dei dati da archiviare sugli Appunti (nell'esempio RichTextBox1.Rtf: specificando la proprietà Rtf si impone che il trasferimento dei dati mantenga la formattazione).

    Per esempio, se RichTextBox2.Text = "Capitolo 1. " ("Capitolo 1. " può essere qualsiasi testo, semplice o formattato, p.es. "Capitolo 1. "), RichTextBox1 contiene un testo con la seguente formattazione:

    "Titolo argomento"

    e N = 12, il codice suesposto produrrà in RichTextBox2 il risultato:

    "Capitolo 1. Titolo argomento" (o "Capitolo 1. Titolo argomento").

    • Modificato FilippoTer sabato 15 settembre 2012 04:06
    • Contrassegnato come risposta FilippoTer lunedì 17 settembre 2012 01:59
    sabato 15 settembre 2012 03:01
  • Devo precisare che funziona anche con Copy e Paste.. nella form non avevo assegnato False alla proprietà ReadOnly (se è False copiando e incollando si perde la formattazione).
    giovedì 20 settembre 2012 14:58