Newsgroup: it.comp.lang.visual-basic
Titolo: visibilità arraylist

Ho creato un arraylist in una sub Form1_Load,voglio richiamare 
questa arraylist in un'altra sub o meglio un elemento di questa
arraylist.
Ma proprio non ci riesco.
Come posso fare ?
Ringrazio 
Carlo
-- 
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader 
http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!

 ha scritto nel messaggio 
news:4901279.1182729289807.JavaMail.newsgroup@sc-ng-1...


 Come posso fare ?
Gli arraylist seguono le regole di visibilità di qualsiasi altro tipo di 
variabile:
- la dichiari privata in una classe, è visibile dalla classe
- la dichiari pubblica in una classe, è visibile dalla classe e come membro 
pubblico della classe
- la dichiari in un metodo, è visibile all'interno del metodo
Ciao 

 Carlo
Arrivata la dritta credevo di essere a cavallo , credevo !
riporto le parti del codice interessate
dove sbaglio ?
Module totalv
    Public copiabox1 As ArrayList
    Public ind As Integer
___________________________________________________
    Public ReadOnly Property copia1() As ArrayList
      Get
       Return (copiabox1)      <= nel debug mi da 
nothing             
        End Get
    End Property
End Module
__________________________________________________
Public Class Form1
Public Shared copiabox1()As ArrayList
__________________________________________________
Private Sub Form1_Load(ByVal sender As System.Object, 
_ByVal e As System.EventArgs) Handles MyBase.Load
-istruzioni
 Dim copiabox1 As New ArrayList()
        For Each o As String In risultatoric
            Dim oo As String = o
            copiabox1.Add(oo)
        Next
__________________________________________________
Private Sub Botton1_Click(ByVal sender As System.Object, 
_ByVal e As System.EventArgs) Handles Botton1.Click
        Dim gg As ArrayList
        ind = 0
        gg = copia1.Item(ind)        <= mi riporta nothing
    End Sub
__________________________________________________
-resto codice
end class
Ringrazio Luciano e Fabio per l'immediatezza dell'aiuto.


        gg = copia1.Item(ind)        <= mi riporta nothing
Qui c'è qualcosa che non va:
gg è un arraylist... copia1 non contiene stringhe?
ind da dove arriva?
Ma tu usi l'option explicit on e l'option strict on?
Controlla nelle proprietà del progetto, è decisamente consigliabile averle a 
ON.
Comunque, se nell'arraylist metti tutti oggetti dello stesso tipo (es. nel 
tuo Form1_Load sono stringhe) ti conviene usare List(Of String):
Dim copiabox1 As New List(Of String)
Questo perchè così avrai copiabox1.Item(i) che restituisce una stringa e non 
un object con anche tutti i vantaggi nell'intellisense di VisualStudio.
Ciao 

Non ci arrivo ,
Allora lo scopo del programino in sommi capi è di caricare una 
direttory
da questa estraggo la prima parte in listbox1 mentre lascio in 
copibox1 la dir intera.
Il Form1 contiene 1 listbox,1 button,1 textbox
Quando seleziono un file nella listbox con button1 voglio che 
appaia il file intero nella textbox.
Risultato : mettendo un punto di interuzione in private sub 
Button1_click
copiabox1 è gia nothing e in TextBox1.Text = copia1(ind) midice:
"riferimento a un oggetto non impostato su istanza di oggetto".
Abbiate pazienza sono autodidatta tutto quello che so e grazie 
ad un libro.
Imports System.io
------------------------------------------------
Module totalv
    Private copiabox1 As List(Of String)
    Public ind As Integer
    Private Property copia1() As List(Of String)
        Get
            Return copiabox1
        End Get
        Set(ByVal value As List(Of String))
            copiabox1 = value 
        End Set
    End Property
End Module
-----------------------------------------------
Public Class Form1
    Public copia1 As List(Of String)
    Public copiabox1 As List(Of String)
    Public tipo, cartella As String
    Dim Mydir As String = ("d:disco 
corrotto\documenti\superpippo")
    Dim risultatoric As System.Collections.ObjectModel.
_ReadOnlyCollection(Of String)
    Public ind As Integer
--------------------------------------------------
    Private Sub Form1_Load(ByVal sender As System.Object, 
_ByVal e As System.EventArgs) Handles MyBase.Load
            On Error Resume Next
        ListBox1.Items.Clear()
        Dim dorigine As String = Mydir 
        risultatoric = My.Computer.FileSystem.GetFiles(dorigine, 
_FileIO.SearchOption.SearchTopLevelOnly)
        Dim x As Integer = Len(dorigine) + 2
        Dim copiabox1 As New List(Of String)
        For Each o As String In risultatoric
            Dim oo As String = Microsoft.VisualBasic.Right(o,
-Len(o) - x)
            copiabox1.Add(o)
            Dim oosenza As String = Microsoft.VisualBasic.Left
_(oo, Len(oo) - 4)
            ListBox1.Items.Add(oosenza) 
        Next
    End Sub
------------------------------------------
    Private Sub Button1_Click(ByVal sender As System.Object, 
_ByVal e As System.EventArgs) Handles Botton1.Click
        Dim copia1 As List(Of String)
        ind = 0
        TextBox1.Text = Convert.ToString(copia1(ind))
    End Sub
-----------------------------------------
End Class


 ad un libro.
Te l'ho detto prima: se nella sub fai la Dim stai usando una var locale alla 
sub e non quella dichiarata a livello di classe (un form č una classe).
Quando dichiari una var reference type (una classe, che si distingue dai 
value type che sono i tipi base: numeri e strutture) il suo valore di 
default č nothing.
Nella sub Button1_Click dovresti notarlo subito perchč VisualStudio ti 
sottolinea copia1 e ti dice "va che 'sta variabile la stai usando prima di 
avergli dato un valore".
Tanto per cominciare Togli la Dim da lě.
Ciao 

        TextBox1.Text = Convert.ToString(copia1(ind))
copia1 è una List(Of String), ogni elemento è una stringa (è stato usato 
apposta), la Convert.ToString() è quindi inutile e comunque la conversione 
di un valore in stringa si fa con
oggetto.ToString()
Ciao 

 property PUBBLICA.
Ciao 

X Fabio,sempre 1000 grazie per il supporto.
Oltre ad essere un testone ,ci si mette anche
il  .Net a non fare quello che voglio.
Scerzo (in parte)
Facciamo il punto ,dopo i tuoi consigli ho mogliorato
e snellito il listato come puoi vedere sotto. Però 
1° devo perforza mettere Dim copiabox1 As New List(Of String)
insub form1_load altrimenti copiabox1 mi da 
"riferimento a un oggetto non impostato su istanza di oggetto"
= arabo per Me.
2° stessa risposta in copia1 = copiabox1(ind)
senza contare che sul libro dice sulle proprietà solo :
si scrivono così .......
3' Perchè facendo un punto di 
interuz.in
 sub butt.(ind,
risultatoric) hanno un valore corretto e copiabox1 nothing.
Fammi un favore grossissimo se puoi , prova il listato ,
non perderci tanto tempo se no diventi pazzo e dimmi se 
ne vieni a capo .
Ciao e grazie ancore
Imports System.io
-----------------------------------------------
Public Class Form1
    Private copiabox1() As List(Of String)
    Dim Mydir As String = ("d:disco corrotto\documenti
_\superpippo")
    Dim risultatoric() As String 
    Public ind As Integer
-----------------------------------------------
    Public Property copia1() As List(Of String)
        Get
            Return copiabox1(ind)
        End Get
        Set(ByVal value As List(Of String))
            copiabox1(ind) = value
        End Set
    End Property
----------------------------------------------
    Private Sub Form1_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs) Handles MyBase.Load
 
        ListBox1.Items.Clear()
        risultatoric = Directory.GetFiles(Mydir) 
        Dim x As Integer = Mydir.Length + 1 
        Dim copiabox1 As New List(Of String)
        For Each o As String In risultatoric
          Dim oo As String = o.Substring(x) 
          copiabox1.Add(o.Substring(x))
          Dim oosenza = Path.GetFileNameWithoutExtension(o) 
          ListBox1.Items.Add(oosenza)
        Next
    End Sub
---------------------------------------------
    Private Sub Button1_Click(ByVal sender As System.Object, 
_ByVal e As System.EventArgs) Handles Botton1.Click
        ind = 0
        copia1 = copiabox1(ind)
 
        TextBox1.Text = copia1.ToString 
    End Sub
End Class


 si scrivono così .......
copia1 = copiabox1(ind)
E' assolutamente inutile, la proprietà stessa per come l'hai implementata è 
inutile e poi leggi quello che stai tentando di fare: assegni a copia1 che è 
una List una stringa che è l'elemento ind di copiabox1.
Inoltre non è corretta la dichiarazione di copiabox1 perchè tu ci hai messo 
le parentesi e quindi è un array: un array di List.
Rivediamo un attimo il tutto:
-----
    Private copiabox1 As New List(Of String)
    Dim Mydir As String = "d:\"
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles MyBase.Load
        ListBox1.Items.Clear()
        copiabox1.Clear()
        Dim risultatoric() As String = Directory.GetFiles(Mydir)
        For Each o As String In risultatoric
            Dim fileName As String = Path.GetFileName(o)
            Dim fileNameSenzaExt = Path.GetFileNameWithoutExtension(o)
            copiabox1.Add(fileName)
            ListBox1.Items.Add(fileNameSenzaExt)
        Next
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        ' qui non so cosa vuoi fare
    End Sub
-----
Qui però mi pare che manchino non solo le basi di vb, ma di programmazione 
in genere.
Ciao 

Funziona è quello che cercavo.
Ti ringrazio sinceramenre per tutto il tempo che 
Mi hai dedicato .
 di nuovo Ciao e Grazie
