Immagini in richtextbox e popup conferma

domenica 07 ottobre 2007 - 18.48

lucag. Profilo | Newbie

Salve a tutti,
ho creato un progetto con una richtextbox, alla quale ho aggiunto un sistema per integrare immagini. Ecco il codice del sistema per l'inserimento immagini:



----------------------

Private Sub Button14_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button14.Click

OpenFileDialog1.FileName = ""

OpenFileDialog1.Title = "Inserisci immagine"
OpenFileDialog1.DefaultExt = "rtf"
OpenFileDialog1.Filter = "Tutti i file|*.*|Bitmap|*.bmp|JPEG|*.jpg|GIF|*.gif|PNG|*.png"
OpenFileDialog1.FilterIndex = 1
OpenFileDialog1.ShowDialog()
OpenFileDialog1.FileName = ""

If OpenFileDialog1.FileName = "" Then Exit Sub

Try
Dim strImagePath As String = OpenFileDialog1.FileName
Dim img As Image
img = Image.FromFile(strImagePath)
Clipboard.SetDataObject(img)
Dim df As DataFormats.Format
df = DataFormats.GetFormat(DataFormats.Bitmap)
If Me.RichTextBoxPrintCtrl1.CanPaste(df) Then
Me.RichTextBoxPrintCtrl1.Paste(df)
End If
Catch ex As Exception
MessageBox.Show("Impossibile inserire l'immagine selezionata", "Inserisci immagine", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try

End Sub

--------------


Il problema è che quando si copiano delle immagini, poi, ridimensionandole, soprattutto riducendo il formato, appaiono grandi perdite di qualità e problemi nel colore. Ci sono alternative migliori?

Inoltre, nel mio programma, vorrei avere anche una pop up, che appare quando si clicca su chiudi se è stata modificata la richtextbox senza salvarla, che chieda la conferma di chiusura. Qual'è il sistema migliore? Grazie!!!

SSUPERPIPPO Profilo | Guru

>Salve a tutti,

Ciao

ti rispondo per il tuo secondo quesito:

>Inoltre, nel mio programma, vorrei avere anche una pop up, che
>appare quando si clicca su chiudi se è stata modificata la richtextbox
>senza salvarla, che chieda la conferma di chiusura. Qual'è il
>sistema migliore? Grazie!!!

Io imposterei una variabile a livello di Form di tipo Boolean con valore False.
Poi nell'evento TextChanged del tuo controllo imposti questa variabile a True.
Quindi, quando clicchi su chiudi inserisci un controllo su questa variabile, se è True chiedi conferma prima di chiudere.

Ciao

Alessandro



http://blogs.dotnethell.it/alebadalin

lucag. Profilo | Newbie

Grazie. Io ho un controllo, che però funziona se applicato a un bottone o menu, nn alla pulsante chiudi del programma. Eccolo:


__________


If rtbDoc.Modified Then

Dim answer As Integer
answer = MessageBox.Show("The current document has not been saved, would you like to continue without saving?", "Unsaved Document", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

If answer = Windows.Forms.DialogResult.No Then
Exit Sub

Else

Application.Exit()

End If

Else

Application.Exit()

End If


____________________

Non posso adattarlo alla mia esigenza?

Ripropongo la domanda per le immagini in richtextbox:

Il problema è che quando si copiano delle immagini, poi, ridimensionandole, soprattutto riducendo il formato, appaiono grandi perdite di qualità e problemi nel colore. Ci sono alternative migliori?



Grazie!

SSUPERPIPPO Profilo | Guru

>Grazie. Io ho un controllo, che però funziona se applicato a
>un bottone o menu, nn alla pulsante chiudi del programma. Eccolo:
>
>
>__________
>

' Dichiari la variabile Boolean a livello di form

Dim BoolModified as Boolean=False

' All'evento TextChange del RichTextBox modifichi in true il suo valore

Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged

BoolModified=True

End Sub

' All'evento FormClosing associ il tuo codice così modificato

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra




http://blogs.dotnethell.it/alebadalin

lucag. Profilo | Newbie

Ottimo, sembra funzionare perfettamente. L'unica cosa è che provando il file exe, quando clicco nella pop up su Si (quindi dovrebbe chiudere) dopo che ho cliccato, devo cliccare ancora una volta. Ma forse è normale....

L'unica cosa che si potrebbe migliorare, ma non so se è possibile, è questa: vorrei che, se le ultime modifiche nel documento (richtextbox) sono state già salvate, non appaia il messaggio. Quindi, che appaia solo se: il documento non è stato salvato o se il documento è stato salvato, ma sono state effettuate delle modifiche dall'ultimo salvataggio. Spero di essermi spiegato!
Grazie!!!

Xnetus Profilo | Junior Member

>Il problema è che quando si copiano delle immagini, poi, ridimensionandole,
>soprattutto riducendo il formato, appaiono grandi perdite di
>qualità e problemi nel colore. Ci sono alternative migliori?
>

Il problema e che quando le immagini sono di ottima qualità e si riducono le immagini si hanno effetti del genere.

http://blogs.dotnethell.it/Xnetus/

SSUPERPIPPO Profilo | Guru

>Ottimo, sembra funzionare perfettamente. L'unica cosa è che provando
>il file exe, quando clicco nella pop up su Si (quindi dovrebbe
>chiudere) dopo che ho cliccato, devo cliccare ancora una volta.
>Ma forse è normale....
>
>L'unica cosa che si potrebbe migliorare, ma non so se è possibile,
>è questa: vorrei che, se le ultime modifiche nel documento (richtextbox)
>sono state già salvate, non appaia il messaggio. Quindi, che
>appaia solo se: il documento non è stato salvato o se il documento
>è stato salvato, ma sono state effettuate delle modifiche dall'ultimo
>salvataggio. Spero di essermi spiegato!
>Grazie!!!

Basta che nell'evento click del button che utilizzi per il salvataggio reimposti a false la variabile di controllo di tipo boolean...

Ciao

Alessandro


http://blogs.dotnethell.it/alebadalin

lucag. Profilo | Newbie

Ho modificato il codice in questo modo,ma nn cambia nulla. Ecco il codice modificato

-------------------------------

Private Sub Button16_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button16.Click

Dim BoolModified As Boolean = False


If currentFile = "" Then
Button1_Click(Me, e)
Exit Sub
End If

Dim strExt As String
strExt = System.IO.Path.GetExtension(currentFile)
strExt = strExt.ToUpper()

Select Case strExt
Case ".RTF"
RichTextBoxPrintCtrl1.SaveFile(currentFile)
Case Else
' to save as plain text
Dim txtWriter As System.IO.StreamWriter
txtWriter = New System.IO.StreamWriter(currentFile)
txtWriter.Write(RichTextBoxPrintCtrl1.Text)
txtWriter.Close()
txtWriter = Nothing
RichTextBoxPrintCtrl1.SelectionStart = 0
RichTextBoxPrintCtrl1.SelectionLength = 0
RichTextBoxPrintCtrl1.Modified = False
End Select

Me.Text = "Lala - " & currentFile.ToString()

End Sub



Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
SaveFileDialog1.Title = "Salva file"
SaveFileDialog1.DefaultExt = "rtf"
SaveFileDialog1.Filter = "Rich Text Files|*.rtf|Text Files|*.txt|HTML Files|*.htm|All Files|*.*"
SaveFileDialog1.FilterIndex = 1
SaveFileDialog1.ShowDialog()

If SaveFileDialog1.FileName = "" Then Exit Sub

Dim strExt As String
strExt = System.IO.Path.GetExtension(SaveFileDialog1.FileName)
strExt = strExt.ToUpper()

Select Case strExt
Case ".RTF"
RichTextBoxPrintCtrl1.SaveFile(SaveFileDialog1.FileName, RichTextBoxStreamType.RichText)
Case Else
Dim txtWriter As System.IO.StreamWriter
txtWriter = New System.IO.StreamWriter(SaveFileDialog1.FileName)
txtWriter.Write(RichTextBoxPrintCtrl1.Text)
txtWriter.Close()
txtWriter = Nothing
RichTextBoxPrintCtrl1.SelectionStart = 0
RichTextBoxPrintCtrl1.SelectionLength = 0
End Select

currentFile = SaveFileDialog1.FileName
RichTextBoxPrintCtrl1.Modified = False
Me.Text = "Lala - " & currentFile.ToString()

End Sub

--------------------

Che ne dici??? Grazie

SSUPERPIPPO Profilo | Guru

>Ho modificato il codice in questo modo,ma nn cambia nulla. Ecco
>il codice modificato
>
>-------------------------------
>
>Private Sub Button16_Click(ByVal sender As System.Object, ByVal
>e As System.EventArgs) Handles Button16.Click
>

Qui c'è l'errore!!! Non devi dichiarare la variabile BoolModified all'interno del metodo click ma devi utilizzare la variabile già dichiarata a livello di form.
Diversamente il valore assegnato a BoolModified ha validità solo per la routine corrente, mentre la variabile globale rimane invariata.

Sostituisci quindi

> Dim BoolModified As Boolean = False

con

BoolModified=False

Vedrai che funziona

Ciao

Alessandro

P.S.: Mi permetto di darti consiglio, per chiarezza del codice ti conviene cambiare il nome dei controlli con nomi significativi (Es. il pulsante salva potresti chiamarlo CmdSave)


http://blogs.dotnethell.it/alebadalin

lucag. Profilo | Newbie

Grazie, ora funziona! Però, se apro un file rtf precedentemente creato, anche se non modifico il testo, appare ancora il messaggio......
perchè?
Invece, è normale che provando l'exe, per tutte le finestre di dialogo, se clicco una volta, poi, debba ri.cliccare?
Grazie

SSUPERPIPPO Profilo | Guru

Devi stare sempre attento a come imposti la variabile Boolean.
Quando tu apri un file rtf e popoli la tua RichTextBox, interviene sempre l'evento TextChange per cui la variabile Boolean diventa True.
Basta che quando apri il file RTF e valorizzi la RichTextBox, imposti la variabile Boolean a False.

Non ho ben capito il secondo quesito...!?!?

Spero di essere stato abbastanza chiaro.

Ciao

Alessandro

http://blogs.dotnethell.it/alebadalin

lucag. Profilo | Newbie

Grazie
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