Comportamento strano savefiledialog

giovedì 26 giugno 2008 - 15.03

Lucifel Profilo | Junior Member

Ciao a tutti,
sto facendo un'applicazione winform su .net 1.1 in vb
Per salvare un file excel che creo correttamente devo usare un savefiledialog, ma succedono cose strane quando lo uso. In pratica io devo distinguere 3 casi:
1) salvo un file che non esiste
2) sovrascrivo un file esistente
3) premo cancel e quindi non voglio salvare

In pratica io ho chiamato il savefiledialog nel seguente modo:

Dim result As DialogResult = Me.e.SaveFileDialog.ShowDialog() If result = DialogResult.Cancel Then ' Ho premuto cancel ' Scrivo il messaggio di salvataggio correto Dim message As String = "Report not created" Me.lablel1.Text = message Else ' Ho premuto ok / Salva Dim path As String = String.Empty If result = DialogResult.OK Then path = Me.e.SaveFileDialog.FileName End If ' Qua salvo..... End if

Nel caso 1 funziona perfettamente
Nel caso 2 e nel caso 3 ho un comportamente strano. In pratica sembra che il DialogResul restituisca Cancel sia quando premo cancel sia quando premo
save ma il file che voglio salvare esiste già. In quel caso (dato che ho premuto Save) dovrebbe restituirmi Ok e non cancel.
Ma se fosse questo il problema sarebbe facile da risolvere, basterebbe guardare il FileName che restituisce l'oggetto, peccato che indipendentemente
dall'evento che restituisca (Ok o Cancel) il FileName è SEMPRE e comunque valorizzato.

Come faccio a distinguere il secondo caso dal terzo?
Qualcuno sa il perché di questo comportamento?

Grazie a tutti in anticipo

Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

Giò Profilo | Newbie

Ciao, hai settato a true la proprietà CheckFileExists ?

Se è settata a true e il file che provi a salvare è già esistente dovrebbe chiederti in automatico se vuoi sovrascrivere o no. Un esempio di codice

Dim dlgSaveFile As New SaveFileDialog
dlgSaveFile.Filter = "Excel Workbook|*.xls"
dlgSaveFile.CheckFileExists = True
If dlgSaveFile.ShowDialog = Windows.Forms.DialogResult.Cancel Then
'mostra messaggio
'.....
Else
Dim fullpath As String = dlgSaveFile.FileName
'salva il file
'........
End If

ciao

G

Lucifel Profilo | Junior Member

Si è settata, infatti quando clicco su un file esistente lui mi chiede se voglio sovrascriverlo. Se premo si lo prende ma il savefiledialog restituisce DialogResult.Cancel e non DialogResult.Ok come mi aspetto

Grazie, ma putroppo il problema resta. Altre idee?
Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

Giò Profilo | Newbie

quindi anche se scegli si quando ti chiede di sovrascrivere lui non ti memorizza il nome del file?

Lucifel Profilo | Junior Member

No, all'opposto
lui lo memorizza anche se gli premo cancel.

In pratica qualsialsi evento io prema (Save o Cancel) sul savefiledialog lui ha sempre un NameFile. Il problema è che quando io premo cancel mi ritorna (giustamente) DialogResult.Cancel, però anche se io premo Save e ho sovrascritto un file già esistente lui ritorna (sbagliando) DialogResult.Cancel. In questo caso io vorrei che mi ritornasse Ok o che mi segnali in qualche modo che ho sovrascritto un file.

Perché nell'altro caso non posso sapere se è cancel perché ho "permuto cancel" o perché ho sovrascritto un file...

Anzi, ti dirò di più...
Se io metto Controllo se il file esiste, e il file non esiste lui mi chiede conferma, e sai qual'è il valore di ritorno del saveFileDialog?
DialogResult.Cancel.

Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

aiedail92 Profilo | Expert

Ciao

Forse il problema è un bug del Framework 1.1, perchè dal 2.0 in poi non si presenta (ho abbandonato l'1.1 tempo fa...)

Nel frattempo puoi risolvere impostando FileName a String.Empty prima di chiamare il metodo ShowDialog, in questo modo se l'utente sovrascrive un file e (sbagliando) ritorna DialogResult.Cancel, hai in FileName il nome del file, se invece clicka su annulla hai String.Empty.

Poi una domanda: nel codice come mai hai inserito due volte il controllo del risultato? :

Dim result As DialogResult = Me.e.SaveFileDialog.ShowDialog() 'Qui... If result = DialogResult.Cancel Then ' Ho premuto cancel ' Scrivo il messaggio di salvataggio correto Dim message As String = "Report not created" Me.lablel1.Text = message Else ' Ho premuto ok / Salva Dim path As String = String.Empty '... E qui If result = DialogResult.OK Then path = Me.e.SaveFileDialog.FileName End If ' Qua salvo..... End If

Luca

Lucifel Profilo | Junior Member

E' sicuramente un bug del framework 1.1 perché ho provato a casa con il 3.5 e non si presenta questo comportamente strano. Purtroppo a lavoro devo arrangiarmi con i strumenti che mi hanno imposto di usare quindi mi devo accontentare.

Per quanto riguarda il controllo del risultato: hai ragione, c'è 2 volte. Il punto è che ho provato diverse volte cambiando pezzi di codice per capire il comportamento e alcune robe sono rimaste. Effettivamente devo togliere il secondo controllo del risultato.

Ora provo e poi ti dico se così funziona.
Grazie intanto

edit: ho provato, così va! Grazie infinite ^__^


Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------
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