bravo , considerato che hai fatto tutto da solo dimostri senz'altro che non hai sprecato tempo
Ci sono alcune cose.
Come sai a differenza dei tipi udt del vecchio vb6 nelle structure del DotNet è possibile scrivere delle procdure.
E' proprio quell oche devi fare per dimensionare gli array al loro interno
ad esempio
Codice:
Public Structure StrNumeriEstrazione
Dim Estratto() As Integer
Sub DimensionaEstratto
redim Estratto (5)
End Sub
End Structure
la cosa va applicata anche alle altre strutture che contengono array , un 'altra cosa i membri non è necessario dichiararli con public vedi che io ho messo Dim
Public PrimaDelMeseBool As Long
Public UltimaDelMeseBool As Long
questi valori non conviene registrarli ma calcolarli con un'apposita funzione
Numero as long
in dotnet il long non è il long del vb6
il long del vb6 in dotnet si chiama integer , non cambia molto ai fini del tuo programma ma non credo che che un numero di estrazione possa aver bisogno di un numero a 8 byte .. gia il long del vb6 era troppo.
Codice:
Public PercorsoDatabase As String = Application.StartupPath() + "\Archivio\"
i valori di configurazioni non metterli hardcoded ma crea una classse/modulo che possa leggerli da un file ini , oddio i puristi mi ammazzeranno , in verità dovresti leggerli dai setting , solo che i setting sono una gran rottura di palle sia per il percorso dove li va a creare sia per modificarli eventualmente a mano. Invece il buon vecchio file ini sta nel path dell'eseguibile.
I nomi delle ruote edelel sorti invece li puoi lasciare hardcoded
.... inclusa una booleana che mi indicherà se l'archivio è stato letto e nel caso mi fa proseguire:
piu che gestire quella variabile crea una funzione che torni sempre un boolean che testa l'array delle estrazioni , se contiene elementi ovviamente deve tornare true
l'array delle estrazioni deve rimanere incapsulato nella classe quindi dichiaralo con private come tutte le altre variabil idelle classi , si accede alle variabili eventualmente tramite le proprietà.
nelle classi del dot net c'è il costruttore quindi mediante la sub new appena istanzi la classe questa viene eseguita ed è li che si fa l'inizializzazione delle variabili
alcune funzioni di utilità che possono servirti nell'intero progetto vanno trasferiti in un modulo/classe a parte
FileEsistente ad esempio è utile ma non devi dichiararlo nella classe che lo usa senno se in un'altra circostanza ti dovesse servire dovresti riscriverlo.
e cosi tutte le altre funzioni che come logica sono simili all'esempio.
non vedo la procedura alimentaEstrazioni
in compenso ti faccio il regalo di un modulo per gestire i parametri di configurazione , cosi stai un pezzo aventi , ci sono solo 2 funzioni pubbliche e sono quelle che devi usare per leggere e scrivere i valori.
I valori possibili si gestiscono aggiungendo i valori al tipo enumerato , per ora c'è solo la voce Archivio.
Ciao ..
Codice:
Imports System.Collections.Specialized
Imports System.Configuration
Public Module ModAppConfig
' **** FUNZIONI PER LEGGERE IL FILE INI
' *******************************************
Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32
'la funzione WritePrivateProfileString dichiarata come Unicode
Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Long
Private sFileIni As String = Application.ExecutablePath & ".ini"
Public Enum eValoriAppConfig
Archivio
End Enum
Private Sub iniLeggiRigaIni(ByVal sMenu As String, ByVal keyword As String, ByRef sValueRitorno As String, ByVal sPathFile As String, ByVal retval As Long)
Dim stringa As String
sValueRitorno = ""
sMenu = UCase(sMenu)
keyword = UCase(keyword)
stringa = Space$(1000)
retval = GetPrivateProfileString(sMenu, keyword, "", stringa, 1000, sPathFile)
If retval <> 0 Then sValueRitorno = Mid$(stringa, 1, retval)
End Sub
Private Sub iniScriviRigaIni(ByVal sMenu As String, ByVal keyword As String, ByVal sValueDefault As String, ByVal sPathFile As String, ByVal retval As Long)
sMenu = UCase(sMenu)
keyword = UCase(keyword)
retval = WritePrivateProfileString(sMenu, keyword, sValueDefault, sPathFile)
End Sub
Private Function GetNomeValoreAppCfg(ByVal eTipo As eValoriAppConfig) As String
Return eTipo.ToString
End Function
Public Function GetValoreCfg(ByVal eTipo As eValoriAppConfig) As String
Dim sValue As String = ""
If sFileIni = "" Then
Return My.Settings(GetNomeValoreAppCfg(eTipo))
Else
Call iniLeggiRigaIni("CONFIG", GetNomeValoreAppCfg(eTipo), sValue, sFileIni, 0)
Return sValue
End If
End Function
Public Sub SalvaValoreCfg(ByVal eTipo As eValoriAppConfig, ByVal sValue As String)
If sFileIni = "" Then
My.Settings(GetNomeValoreAppCfg(eTipo)) = sValue
My.Settings.Save()
Else
Call iniScriviRigaIni("CONFIG", GetNomeValoreAppCfg(eTipo), sValue, sFileIni, 0)
End If
End Sub
End Module