Copiare richtext

lunedì 02 giugno 2008 - 23.41

edward_radical Profilo | Newbie

Scusate la probabilmente terribile domanda da niubbo
Ho la necessità di effettuare la copia di una richtextbox su una variabile (di tipo richtextbox) sulla quale effettuare delle considerazioni ed eventualmente delle modifiche.
Appena definisco la variabile e la copio a quel punto qualsiasi modifica effettuata sulla copia viene fatta su entrambi i controlli.
Temo sia un concetto "must" del vb .net (sono autodidatta...) come faccio a fare questa copia senza associarli?

es:
[...]
Dim rtb_save As New RichTextBox
rtb_save=rtb
[...]

Grazie in anticipo e scusate la domanda ovvia.

pieroalampi Profilo | Expert

ma la variabile nuova deve essere necessariamente una ritchtextbox? non puoi utlizzare uyna text? prova!
Dim rtb_save As String = RichTextBox1.Text
MsgBox("questo è il contenuto della variabile " & rtb_save)



vb.net 2005
------------------------------------------------------
::::Sempre a manetta in curva::::
------------------------------------------------------

edward_radical Profilo | Newbie

Grazie per la risposta.
Eh purtoppo no, devo usare alcuni metodi della richtext, ma devono agire sull'oggetto copiato e non sul relativo oggetto padre di origine.
A parte la casisitica specifica sarei proprio interessato a capire bene questo funzionamento.

Qualche consiglio?

aiedail92 Profilo | Expert

Ciao

I cambiamenti che esegui su "rtb_save" si ripercutono anche su "rtb" perchè in effetti le due variabili puntano allo stesso oggetto. Infatti qui:

Dim rtb_save As New RichTextBox

Dichiari rtb_save come un nuovo oggetto di tipo RictTextBox, ma qui:

rtb_save = rtb

le riassegni lo stesso oggetto di rtb. Infatti RichTextBox è una classe, quindi è un tipo riferimento. Assegnando un tipo riferimento quello che fai è assegnare alla variabile l'indirizzo in memoria dell'oggetto, non l'oggetto (spero di essere stato abbastanza chiaro, in caso contrario chiedi )

Per risolvere il tuo problema, dovresti trascrivere le informazioni significative nella variabile rtb_save, ad esempio così:

'dichiari la variabile d'appoggio 'e le assegni un NUOVO oggetto Dim rtb_save As New RichTextBox() 'Copi le informazioni significative, 'ad esempio il testo formattato rtb_save.Text = rtb.Text

E dopo aver fatto le tue considerazioni, eventualemente ricopiare le informazioni significative sulla RichTextBox originale.

Luca

edward_radical Profilo | Newbie

Grazie sei stato chiarissimo!
Ma non è che esiste un modo per copiare TUTTE le informazioni sul nuovo oggetto senza incorrere nel problema iniziale?
Copiarle una alla volta sarebbe decisamente poco elegante.

Grazie ancora.

Lanello Profilo | Senior Member

Con il codice che ti ha postato Luca crei un nuovo oggetto e quindi NON collegato con quello "padre"

lo riporto esattamente per comodità:

'dichiari la variabile d'appoggio 'e le assegni un NUOVO oggetto Dim rtb_save As New RichTextBox() 'Copi le informazioni significative, 'ad esempio il testo formattato rtb_save.Text = rtb.Text

se tu fai "rtb_save=rtb" duplichi l'oggetto
se invece fai come ti ha detto Luca "rtb_save.Text = rtb.Text" copi soltanto il contenuto del rtb nel nuovo oggetto, rimanendo completamente scollegato dal primo.

ti consiglio quindi di accettare la risposta di Luca.
-----------------------------------------------------
La ricompensa per una cosa ben fatta, è averla fatta.

aiedail92 Profilo | Expert

Nel caso volessi copiare proprio TUTTE le proprietà dell'oggetto (quindi anche quelle "grafiche", come form padre e posizione all'interno del form) potresti utilizzare la reflection, ma a questo punto avresti una nuova RichTextBox nel form (sempre che non esegui un "filtro" delle proprietà che non ti interessano, ma resta sempre il problema dell'"eleganza")

Se ti interessa, posso postarti un esempio per come fare.

Luca

edward_radical Profilo | Newbie

Grazie ragazzi ho risolto con copie "semplici" e senza l'uso delle reflection.

Adesso googolo un po' per studiarle bene.

Grazie ancora!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5