Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - CommonDialog e il comando Annulla
Forum - Visual Basic 6 - CommonDialog e il comando Annulla

Avatar
psycho85 (Ex-Member)
Pro


Messaggi: 72
Iscritto: 20/08/2006

Segnala al moderatore
Postato alle 0:38
Sabato, 02/09/2006
Raga, il problema è questo...

Sto scrivendo un programma stile blocco note per creare, aprire e salvare file di testo. Uso il CommonDialog per accedere alle finestre "Apri e Salva".

Tutto funziona, c'è solo un problema!!!

Sia nella schermata APRI sia in quella SALVA,se viene premuto il tasto "ANNULLA" e quindi l'utente dedice di non aprire o non salvare il file, viene fuori l'errore

ERRORE di run-time '75':
Errore di accesso al percorso/file

Ho visto che c'è la possibilitàdi usare le api per utilizzare queste schermate ma sono piene di comandi che non capisco ancora e quindi non voglio inserire del codice che non capisco nel mio programma.

c'è la possibilità di gestire il comando ANNULLA ed eliminare questo BUG?

Ecco il code che utilizzo:

Procedura per salvare il file

Istruzioni precedenti

CommonDialog1.ShowOpen
Open CommonDialog1.FileName For Input As #1
strTesto = Input(LOF(1), 1)
Close 1

Istruzioni successive
:-?

PM Quote
Avatar
natamas (Member)
Pro


Messaggi: 115
Iscritto: 09/04/2006

Segnala al moderatore
Postato alle 14:15
Sabato, 02/09/2006
Non puoi utilizzare il comando "showopen" perchè questo comando seleziona un file che già esiste e non uno che dovrai salvere.
Ti consiglio di usare la funzione "showsave".
Comunque potresti utilizzare questo codice:
Codice sorgente - presumibilmente VB.NET

  1. sub salva()
  2.         With CommonDialog1
  3.             .DialogTitle = "Salva"
  4.             .CancelError = False
  5.             .Filter = "File di tipo testo(*.txt)|*.txt"
  6.             .ShowSave
  7.             If Len(.FileName) = 0 Then
  8.                 msgbox "Non hai dato un nome al file", vbExclamation
  9.                 exit sub
  10.             else
  11.                call scrivi(.FileName)
  12.             end if
  13.         End With
  14. end sub
  15.  
  16. sub scrivi(file as string)
  17. Open file For Input As #1
  18. strTesto = Input(LOF(1), 1)
  19. Close 1
  20. end sub



Vedi che questa funzione l'ho pensata e scritta, senza provarla.
Perciò se ci sono dei bug contattami che li possiamo risolvere insieme.
In bacca al lupo:k:

Ultima modifica effettuata da natamas il 02/09/2006 alle 14:17
PM Quote
Avatar
psycho85 (Ex-Member)
Pro


Messaggi: 72
Iscritto: 20/08/2006

Segnala al moderatore
Postato alle 16:47
Domenica, 03/09/2006
natamas provo a vedere cosa riesco a combinare, ti faccio sapere al più presto...grazie per il code e per la tua disponibilità;)

PM Quote
Avatar
psycho85 (Ex-Member)
Pro


Messaggi: 72
Iscritto: 20/08/2006

Segnala al moderatore
Postato alle 17:45
Domenica, 03/09/2006
Allora, diciamo che ci ho ragionato su un'attimo e con il tuo code possiamo sia aprire sia salvare file senza nessun problema. Voglio solamente dirti che sono un principiante e tutto quello che so l'ho imparato qua e la quindi non ti spaventare se faccio qualche GAF di scrittura del code...

Ho messo sul form il commondialog, una textbox e due command button (APRI E SALVA) ed ecco il code:

-------------------->Inizio Code<-----------------

Dim strTesto As String 'Variabile che contiene il testo

Sub Apri() 'Procedura per l'apertura dei file

With CommonDialog1
.DialogTitle = "Apri"
.CancelError = False
.Filter = "File di tipo testo(*.txt)|*.txt"
.ShowOpen
If Len(.FileName) = 0 Then
MsgBox "Non hai dato un nome al file", vbExclamation
Exit Sub
Else
Call ProceduraApri(.FileName)
End If
End With
End Sub

Sub Salva()

With CommonDialog1
.DialogTitle = "Salva"
.CancelError = False
.Filter = "File di tipo testo(*.txt)|*.txt"
.ShowSave
If Len(.FileName) = 0 Then
MsgBox "Non hai dato un nome al file", vbExclamation
Exit Sub
Else
Call ProceduraSalva(.FileName)
End If
End With
End Sub

Sub ProceduraApri(file As String)
Open CommonDialog1.FileName For Input As #1
strTesto = Input(LOF(1), 1)
Close 1
txtTesto.Text = strTesto
End Sub

Sub ProceduraSalva(file As String)
Open CommonDialog1.FileName For Output As #1
Print #1, txtTesto.Text
Close 1
txtTesto.Text = strTesto
End Sub

Private Sub Command1_Click()
Apri
End Sub

Private Sub Command2_Click()
Salva
End Sub

-------------------->Fine Code<-------------------

Questo codice FUNZIONA l'ho testato sia in apertura che in salvataggio, ovviamente necessita di qualche ritocchino per migliorarlo.

Cosa più importante che IL FAMOSO BUG l'abbiamo eliminato, adesso se si preme il pulsante "INDIETRO" nelle finestre APRI O SALVA non viene visualizzato più l'errore....

PM Quote
Avatar
natamas (Member)
Pro


Messaggi: 115
Iscritto: 09/04/2006

Segnala al moderatore
Postato alle 13:26
Lunedì, 04/09/2006
Testo quotato


Sub ProceduraApri(file As String)
Open CommonDialog1.FileName For Input As #1
strTesto = Input(LOF(1), 1)
Close 1
txtTesto.Text = strTesto
End Sub

Sub ProceduraSalva(file As String)
Open CommonDialog1.FileName For Output As #1
Print #1, txtTesto.Text
Close 1
txtTesto.Text = strTesto
End Sub


se tu richiami la funzione "procedurasalva" e "proceduraapri" e ad entrambi mandi l'informazione che vogliono, cioè "file as string", non c'è bisogno di mettere nella funzione open nuovamente il commondialog1.filename, ma basta inserire "file", cioè l'informazione che tu gli hai mandato quando hai chiamato la funzione.
Eempio:
Codice sorgente - presumibilmente VB.NET

  1. Sub ProceduraApri(file As String)
  2. Open file For Input As #1
  3. strTesto = Input(LOF(1), 1)
  4. Close 1
  5. txtTesto.Text = strTesto
  6. End Sub
  7.  
  8. Sub ProceduraSalva(file As String)
  9. Open file For Output As #1
  10. Print #1, txtTesto.Text
  11. Close 1
  12. txtTesto.Text = strTesto
  13. End Sub


Altrimanti se vuoi fare come dici tu ti consiglio di modificare così il codice:
Codice sorgente - presumibilmente VB.NET

  1. Dim strTesto As String 'Variabile che contiene il testo
  2.  
  3. Sub Apri() 'Procedura per l'apertura dei file
  4.  
  5. With CommonDialog1
  6. .DialogTitle = "Apri"
  7. .CancelError = False
  8. .Filter = "File di tipo testo(*.txt)|*.txt"
  9. .ShowOpen
  10. If Len(.FileName) = 0 Then
  11. MsgBox "Non hai dato un nome al file", vbExclamation
  12. Exit Sub
  13. Else
  14. Call ProceduraApri
  15. End If
  16. End With
  17. End Sub
  18.  
  19. Sub Salva()
  20.  
  21. With CommonDialog1
  22. .DialogTitle = "Salva"
  23. .CancelError = False
  24. .Filter = "File di tipo testo(*.txt)|*.txt"
  25. .ShowSave
  26. If Len(.FileName) = 0 Then
  27. MsgBox "Non hai dato un nome al file", vbExclamation
  28. Exit Sub
  29. Else
  30. Call ProceduraSalva
  31. End If
  32. End With
  33. End Sub
  34.  
  35. Sub ProceduraApri()
  36. Open CommonDialog1.FileName For Input As #1
  37. strTesto = Input(LOF(1), 1)
  38. Close 1
  39. txtTesto.Text = strTesto
  40. End Sub
  41.  
  42. Sub ProceduraSalva()
  43. Open CommonDialog1.FileName For Output As #1
  44. Print #1, txtTesto.Text
  45. Close 1
  46. txtTesto.Text = strTesto
  47. End Sub
  48.  
  49. Private Sub Command1_Click()
  50. Apri
  51. End Sub
  52.  
  53. Private Sub Command2_Click()
  54. Salva
  55. End Sub



Fammi sapere,ciao
;)

Ultima modifica effettuata da natamas il 04/09/2006 alle 13:28
PM Quote
Avatar
psycho85 (Ex-Member)
Pro


Messaggi: 72
Iscritto: 20/08/2006

Segnala al moderatore
Postato alle 17:34
Giovedì, 07/09/2006
Ciao, ho esaminato le due possibilità e sono arrivato ad una conclusione...tra poco invio sul form il codice con la spiegazione....;)

PM Quote
Avatar
psycho85 (Ex-Member)
Pro


Messaggi: 72
Iscritto: 20/08/2006

Segnala al moderatore
Postato alle 18:03
Venerdì, 08/09/2006
Ho creato un modulo e all'interno ho inserito il seguente code:

--------------Inizio Codice Modulo---------------

Sub ProceduraApri(file As String)
Open file For Input As #1
strTesto = Input(LOF(1), 1)
Close 1
frmAppuntiXP.txtTesto.Text = strTesto
End Sub

Sub ProceduraSalva(file As String)
Open file For Output As #1
Print #1, frmAppuntiXP.txtTesto.Text
Close 1
End Sub

Sub Apri()

With frmAppuntiXP.CommonDialog1
.DialogTitle = "Apri"
.CancelError = False
.Filter = "File di testo|*.txt|Pagina Web|*.htm|Tutti i file|*"
.ShowOpen
If Len(.FileName) = 0 Then
'Eventuale msgbox che avverte che il file non è stato salvato
blnModifiche = True
Else
Call ProceduraApri(.FileName)
End If
End With
End Sub

Sub Salva()

With frmAppuntiXP.CommonDialog1
.DialogTitle = "Salva"
.CancelError = False
.Filter = "File di testo|*.txt|Pagina Web|*.htm|Tutti i file|*"
.ShowSave
If Len(.FileName) = 0 Then
'Eventuale msgbox che avverte che il file non è stato salvato
blnModifiche = True
Exit Sub
Else
Call ProceduraSalva(.FileName)
End If
End With

End Sub

----------------Fine Codice Modulo--------------



Poi nel form principale del programma ho inserito



------------Inizio Code per aprire File-----------

Private Sub mnuApri_Click()
    Apri
End Sub

-------------Fine Code per aprire File-----------

------------Inizio Code per salvare File------
Private Sub mnuSalva_Click()

    Salva

End Sub
-----------Inizio Code per salvare File---------


In questo modo, ho accorciato enormemente il codice del programma e risolto il bug del comando annulla....GRAZIE MILLE NATAMAS

PM Quote
Avatar
natamas (Member)
Pro


Messaggi: 115
Iscritto: 09/04/2006

Segnala al moderatore
Postato alle 13:27
Sabato, 09/09/2006
Di niente.
Ciao
;)

PM Quote