Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Problema di visibilità variabile in VB.Net

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

Problema di visibilità variabile in VB.Net

Postdi Matala » 02/02/06 18:18

Salve, premetto che sono alle prime armi. Il mio problema è stupido ma è tanto che ci batto la testa e non riesco a trovare la soluzione... :oops:
Dovrei creare la versione informatizzata di un test:
Alla pressione di vero o falso scrivo i risulati su un file.
Mi da un errore, come se l'oggetto StreamWriter da pulsante non riesca a vederlo:

Private Sub form1_Load(....
...
Dim sw As StreamWriter = File.CreateText("risultati.csv")
...
Private Sub btn_vero_Click(...
...
sw.Write("Item" + item_vis + ";" + "vero" )
Ecco, è qui che mi da errore: sw non lo riconosce, se invece scrivo la stessa cosa dopo aver dichiarato sw non ci sono problemi.
Come posso fare?

Grazie 1000. ;)
Matala
Utente Junior
 
Post: 74
Iscritto il: 23/08/02 14:13

Sponsor
 

Postdi hydra » 02/02/06 18:43

Beh, se tu dichiari sw nell'evento load, questo diventa una variabile locale dell'evento. Lo devi dichiarare all'inizio, prima di un qualsiasi evento, tipo dopo il codice generato dal costruttore.
Poi nell'evento load lo puoi istanziare e tutto ti dovrebbe funzionare.

Ovviamente, regola generale, le variabili dichiarate come Private nella stessa classe sono accessibili solo dalla classe stessa, le variabili dichiarate negli eventi sono accessibili solo all'interno dell'evento (e all'interno degli eventi non le puoi dichiarare Public).
Avatar utente
hydra
Moderatore
 
Post: 7002
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Risposta chiara, ma non riesco a risolvere...

Postdi Matala » 02/02/06 18:55

Grazie per la risposta tempestiva.
Concordo con quanto mi dici, ma avrei previsto un "nome incrementale" per i risultati in modo che, se esiste già il file test1, lui mi crea test2 e così via:

'Recupera il nome del primo file "libero" su cui scrivere i risultati
Dim conta As Integer = 1
Do Until File.Exists("test" + CStr(conta) + ".csv") = False
conta += 1
Loop
risultati = "test" + CStr(conta) + ".csv"

'Apre il file in Stream-Write per la scrittura dei risultati
Dim sw As StreamWriter = File.CreateText(risultati)
sw.WriteLine("Test eseguito da: ")
sw.WriteLine("In data:" + CStr(Now))

e fin quì ovviamente funziona.
Altrettanto ovviamente come mi hai fatto notare al click del pulsante l'oggetto sw non lo vede...

Come posso rendere l'oggetto sw accessibile dal click di un pulsante?
Se provo a dichiararlo public invece che privato mi dice:
'Public' is not valid on a local variable declaration.

Non so come fare... :cry:
Matala
Utente Junior
 
Post: 74
Iscritto il: 23/08/02 14:13

Postdi hydra » 02/02/06 19:07

Come ti ho detto non puoi dichiarare una variabile public all'interno di un evento. Comunque il codice inizia con
Codice: Seleziona tutto
Public Class Form1
    Inherits System.Windows.Forms.Form

e poi c'è il codice generato automaticamente, quello che è nel box grigio espandibile. Appena sotto quello ti dichiari le tue variabili, cioè:
Codice: Seleziona tutto
Public Class Form1
    Inherits System.Windows.Forms.Form

#Region " Codice generato da Progettazione Windows Form "
...
#End Region

    Dim sw As IO.StreamWriter


Ovviamente le variabili te le puoi dichiarare dove vuoi, basta che non sia all'interno di un evento

Codice: Seleziona tutto
Public I as Byte                            ' Questa variabile sarà accessibile in tutte le classi del progetto

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim L as Long                              ' Questa variabile sarà accessibile solo nell'evento load
...
    End Sub

Dim S as String                            ' Questa variabile sarà accessibile solamente in tutta questa classe


ma io per comodità e leggibilità le dichiaro all'inizio, magari racchiuse in un #region, dipende da quante sono. ;)
Avatar utente
hydra
Moderatore
 
Post: 7002
Iscritto il: 19/07/04 08:06
Località: Vallis Duplavis

Ok, risolto

Postdi Matala » 02/02/06 20:08

Grazie 1000, ho risolto seguendo le tue indicazioni.
Non avevo capito che si poteva dichiarare sw come oggetto StreamWriter all'inizio e poi istanziarlo successivamente per "far aprire il file giusto".
In effetti me lo avevi detto anche nel primo suggerimento. :(
Grazie per i suggerimenti, la pazienza e ancor più per la tempestività ;)
Matala
Utente Junior
 
Post: 74
Iscritto il: 23/08/02 14:13


Torna a Programmazione


Topic correlati a "Problema di visibilità variabile in VB.Net":

Problema Windows 10
Autore: asso1998
Forum: Software Windows
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti