alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Sapreste dirmi, per cortesia, se esiste un'istruzione che consenta di portare il valore di una variabile elaborata in una Private Sub all'interno di un'altra Private Sub?
|
|
crash outside control (Normal User)
Expert
Messaggi: 217
Iscritto: 12/02/2008
|
Non ho capito, intendi elaborare una variabile all' interno di una procedura privata e poi utilizzare il suo valore in un' altra procedura ?
Se così fosse, non credo sia possibile...
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
Penso sia più semplice dichiararla con la keyword "Public ... As" anzichè "Dim...As", all'interno del Public Class Form1 se stai sviluppando una Windows Application, o all'interno del modulo se invece quello che stai sviluppando è una Console Application. Così facendo la variabile sarà accessibile da entrambi i Private Sub, così come anche le modifiche che le verranno apportate. Buona fortuna !
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Postato originariamente da klez91:
Penso sia più semplice dichiararla con la keyword "Public ... As" anzichè "Dim...As", all'interno del Public Class Form1 se stai sviluppando una Windows Application, o all'interno del modulo se invece quello che stai sviluppando è una Console Application. Così facendo la variabile sarà accessibile da entrambi i Private Sub, così come anche le modifiche che le verranno apportate. Buona fortuna ! |
Ciao klez91.
Purtroppo io sono un apprendista del Visual Basic e non riesco a seguirti. Ti spiego a cosa mi serve il contento di una variabile in un'altra Private Sub.
Sto cercando di scrivere un programma per una rubrica telefonica e finora riesco a registrare e richiamare nominativi e mi è venuto fuori il seguente problema:
Se una volta che richiamo un nominativo con il bottone "cerca" suddividendo i vari elementi che lo compongono nelle varie TextBox (Nome, Cognome, Indirizzo, ecc.) e vedo che lo stesso nominativo necessita di una modifica , dovrei prima aver memorizzato il nominativo che ho richiamato, modificarlo e poi, con il bottone "salva modifica" andrei a registrarlo al posto del vecchio nominativo.
Ma ovviamente non appena effettuo la modifica, la variabile non corrisponde più a quella originale e quindi non posso più recuperare la posizione che aveva all'interno del file per sostituirlo.
Spero di essere stato sufficientemente chiaro nella spiegazione del mio problema.
Grazie, ad ogni modo per il tuo intervento.
Io ho provato a mettere fra le Dim della Private Sub che cerca il nominativo, ciò che tu mi hai indicato e cioè:
Public Nominativo As String ma ovviamente VB mi segnala questo errore
__________________________________________________
Errore 1 'Public' non valido in una dichiarazione di variabile locale.
__________________________________________________
Pensi di potermi aiutare?
|
|
klez91 (Normal User)
Pro
Messaggi: 117
Iscritto: 04/05/2008
|
L'errore è molto semplice da risolvere in quanto è dovuto al fatto che tu dichiari una variabile Public all'interno di una Private Sub. In realtà avresti dovuto dichiarala subito sotto alla scritta "Public Class Form1" che viene generata automaticamente dal compilatore quando crei un nuovo progetto, e non come hai fatto tu all'interno della Private Sub. Spero di essere stato chiaro in ogni caso sotto ti mostro un piccolo schema di come avresti dovuto scrivere. Alla prossima, e fammi sapere come è andata !!!
Codice sorgente - presumibilmente VB.NET |
Imports Quello che vuoi, non è necessario Public Class Form1 'E' qui che devi dichiarare la variabile in questo modo Public [NomeVariabile] As [TipoVariabile] 'Qui invece hai il resto del programma Private Sub NomeSubNumero1(ecc. ecc.) 'Mentre qui dichiari le variabile come le hai sempre dichiarate e cioè Dim [NomeVariabile] As [TipoVariabile] 'Ovviamente puoi utilizzare la variabile dichiarata come Public e il suo valore resterà tale anche nell'altra Private Sub sotto End Sub Private Sub NomeSubNumero2(ecc. ecc.) ... End Sub End Class
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
In realtà non è necessario che sia public, e, anzi, è meglio che sia private, poiché è utile solo ed esclusivamente al funzionamento del form. Quello che gli altri stanno cercando di dirti è di non dichiarare una variabile locale INTERNA alla procedura, dato che a questa non potresti accedere dall'altra procedura. Piuttosto dovresti usare una variabile dichiarata a livello di CLASSE, in modo che ogni procedura possa vederla in quanto membro della stessa classe.
Codice sorgente - presumibilmente VB.NET |
Class Form1 Private Current As Persona Private Sub Ricerca() 'Qui imposti Current sul risultato della ricerca End Sub Private Sub Salva() 'Qui ottieni le modifiche dalle textbox, che non 'influenzano la variabile Current precedentemente presa End Sub End Class
|
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Ciao Totem
Grazie per il tuo intervento in aiuto di un apprendista in Visual Basic.NET, ma prima del tuo intervento avevo preso per buono il consiglio di klez91 ed avevo elaborato il codice che riporto qui sotto. La variabile in questione è la Z, che memorizza la posizione del Nominativo da correggere o (se necessario) da cancellare. L'ho provata ed in effetti conserva il valore della posizione del Nominativo richiamato da una Agenda txt.
Il mio problema è che non so dove posizionarla all'interno di questo codice con il quale registro tutti i Nominativi della mia Agenda.
Mi aiuteresti cortesemente a trovare la sua collocazione?
Grazie infinite
alpi39 (Alberto) dal Brasile
__________________________________________________
Public Class Form1
Public Z As Integer
__________________________________________________
'Private Sub Button2 serve per registrare un nominativo corretto
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Apre il file C:\Agenda.txt
Dim Nominativo As String = ""
Dim Percorso As String = "C:\Agenda"
Dim PercorsoFile As String = "C:\Agenda\Agenda.txt"
Dim Z As Integer
For I As Byte = 1 To 11
If I < 11 Then Nominativo = Nominativo + Me.Controls("TextBox" & I).Text + (",")
Next I
Nominativo = Nominativo + Me.Controls("TextBox" & 11).Text + Chr(13)
'Crea la cartella "Agenda" ed al suo interno, il file "Agenda.txt" se assente
'oppure lo apre in lettura e lo aggiorna attraverso la determinazione della sua esistenza (metodo fileExist)
System.IO.Directory.CreateDirectory(Percorso)
' è possibile utilizzare Metodo My.Computer.FileSystem.WriteAllText per scrivere del testo all'interno dei file. Se il file specificato non esiste, viene creato automaticamente.
My.Computer.FileSystem.WriteAllText(PercorsoFile, Nominativo, True)
End Sub
__________________________________________________
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Ciao Totem
Questo messaggio lo scrivo dopo aver scritto ieri quello precedente nel quale ti dicevo che la variabile Z funzionava egregiamente.
Oggi ho riprovato e con mia grande delusione ho visto che in realtà non funziona. Potresti, cortesemente rivedere per me il codice che è allegato al precedente messaggio?
Te ne sarei infinitamente grato.
Alpi39 (Alberto)
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Tu hai dichiarato due Z, non una sola! Noi non ti abbiamo detto di dichiararne due, mi pare. Se due variabili non nello stesso blocco hanno lo stesso nome viene usata quella appartenente all'ambito più interno e particolare. In questo caso solo la Z dichiarata DENTRO la procedura viene usata, mentre quella fuori non ne risente. Tu devi utilizzare solo quella fuori!
|
|