Newsgroup: it.comp.lang.visual-basic
Titolo: : Consiglio Modifica Form :

Salve Nwg !
Avrei bisogno di Un suggerimento..
Dato che ho fatto un form per la gestione delle opzioni, volevo chiedervi se
era possibile sapere se l'utente abbia modificato valore anke di un solo
componetnte presente nel form (Vorrei far uscire la MSGBOX "CONFERMI LE
MODIFICHE" solo se le modifiche sono state realmente effettuate..!).
 Siccome sono 40 componeti nn associabili in matrici Vorrei evitare di fare
tante funzioni ON _CHANGE !
Grazie per la collaborazione !
Moebius

 MODIFICHE" solo se le modifiche sono state realmente effettuate..!).
Puoi controllare sull'unload se le opzioni di configurazione precedentemente
caricate corrispondono a quelle attuali.
Ciao
--
using System.Gtk.Forms = "
http://www.neodatatype.net/windowsforms/sgf.aspx
"
mathParser = "
http://www.neodatatype.net
"
sitoComune = "
http://www.it-lang-vb.net
"

 Ciao

 wrote in message news:arqofp$t60

Senza IF:
bModified = bModified Or (oldConfigParam1 <> newConfigParam1)
bModified = bModified Or (oldConfigParam2 <> newConfigParam2)
...


 bModified = bModified Or (oldConfigParam2 <> newConfigParam2)
47 Paremetri..47 bModified ? Nn perdo in velocità ?
Cosi facendo Devo prendere ad ogni accesso oldConfigParam e ad ogni chiusura
newConfigParam...x 47 volte...
Cmq ora fo un pò di prove


 anke di un solo componetnte presente nel form
Prova queste 2 funzioni:
Dim DatiPrecedenti() As Variant
Private Sub SalvaDatiBase()
   Dim Ctrl As Control
   Dim ContaDati As Long
   For Each Ctrl In Me
      If Not TypeOf Ctrl Is CommandButton Then
         ReDim Preserve DatiPrecedenti(ContaDati)
         On Error Resume Next
         DatiPrecedenti(ContaDati) = Ctrl.Value
         If Err > 0 Then
            Err = 0
            DatiPrecedenti(ContaDati) = Ctrl.Text
         End If
         If Err = 0 Then
            ContaDati = ContaDati + 1
         End If
      End If
   Next
End Sub
Private Function IsDatiModificati() As Boolean
   Dim Ctrl As Control
   Dim ContaDati As Long
   Dim DatoDaConfrontare As Variant
   IsDatiModificati = False
   For Each Ctrl In Me
      If Not TypeOf Ctrl Is CommandButton Then
         On Error Resume Next
         DatoDaConfrontare = Ctrl.Value
         If Err > 0 Then
            Err = 0
            DatoDaConfrontare = Ctrl.Text
         End If
         If Err = 0 Then
            If DatiPrecedenti(ContaDati) <> _
                     DatoDaConfrontare Then
               IsDatiModificati = True
               Exit Function
            End If
            ContaDati = ContaDati + 1
         End If
      End If
   Next
End Function
La prima va chiamata dopo aver settato i valori iniziali della maschera, la
seconda nella queryunload, in modo simile a questo esempio:
Private Sub Form_QueryUnload(Cancel As Integer, _
          UnloadMode As Integer)
   If IsDatiModificati Then
      Cancel = MsgBox("Ci sono dati modificati, vuoi uscire?", _
          vbYesNo) = vbNo
   End If
End Sub
Ciao
*Roby*

Ok..il codice Funge ma..
Il form in questione viene da me aggiornato tramite un FILE INI di opzioni,
ogni qual volta viene richiamato il metodo ACTIVATE del form..quindi il
codice che mi hai dato volente o nolente ad ogni richiesta di unload mi
visualizza il messaggio relativo al cambiamento dei dati anke se i dati del
form nn sono minimante cambiati..!
Come posso ovviare a questo inconveniente..?
Ciao e grazie ancora per l'help.

Moebius ha scritto:

Chiama la SalvaDatiBase solo dopo aver fatto i posizionamenti dal file INI

 ACTIVATE del form..
Oltre a quello che ti ha già detto Lupo, aggiungerei che se usi il metodo
Activate ricordati che questo viene chiamato ogni volta che la form si
attiva (ad esempio quando passi da un programma ad un altro con Alt-Tab).
Metti quindi un flag statico di PrimaVolta in modo che la lettura dell'ini
con aggiornamento della maschera la esegui una volta sola.
Ciao
*Roby*

Tnks..to all..