Newsgroup: it.comp.lang.visual-basic
Titolo: Oggetti e collection...

Ciao Gente!
Per la vostra felicità ho un'altra domandina da fare! :)))
Io ho una bellissima classe (o oggetto???) columns che è un insieme di
ogetti column.
Bello vero?
Per fare riferimento ad una column specifica mi basta scrivere
.columns(index)
Ora arriva il problema: dentro la classe column ho dei metodi e delle
proprietà. Per la maggior parte di esse ho bisogno di conoscere l'index, ma
non so da dove pescarlo...
premetto che ho utilizzato il wizard che si è praticamente arrangiato a
creare il tutto...
Vi Prego Aiutatemi!
Grazie 1000,2000, 100000!!! :)))
ByeZ
SebaMix

Ciao Seba,
se hai dei metodi che richiedono l'index probabilmente questi devono essere
collocati nella classe che gestisce la collezione columns cosģ potrai
scrivere eventualmente classe.metodo(index). se invece lo collochi della
classe column non hai bisogno dell'index basta che ti riferisci all'oggetto
inizializzato. columns(index).metodo
all'interno della classe colum avrai a disposizione le proprietą che ti
servono.

Non ho capito nulla... :(((

Non ho capito nulla... :(((
Immagino che la classe columns abbia un metodo .Add o qualcosa di simile che ti permette di
aggiungere un nuovo oggetto alla collection, gusto?
Se sģ, allora:
Alla classe column aggiungi una proprietą Index:
Private vIndex As Integer
Public Property Get Index() As Integer
    Index = vIndex
End Property
Public Property Let Index(ByVal vNewValue As Integer)
    If InAggiunta Then vIndex = vNewValue
End Property
Il metodo .Add (o quello che č) della classe columns, lo implementi cosģ:
Private CollColumns As New Collection
Public Sub Add(*parametri*)
    Dim NuovoColumn As New clsColumn
    With NuovoColumn
        .Index = IndiceColumns
        'eventuali altre proprietą, in base ai parametri passati
        CollColumns.Add NuovoColumn, CStr(.Index)
    End With
    IndiceColumns = IndiceColumns + 1 
End Sub
InAggiunta č una variabile che ti impedisce di modificare manualmente il valore della proprietą
.Index, mantre IndiceColumn č una variabile che ti tiene conto del numero di oggetti nella
collections.
A dire il vero questa seconda variabile puņ essere evitata, poiché tale valore lo ottieni da
IndiceColumns.Count
In ogni caso, devi dichiararle in un modulo .bas:
Public InAggiunta As Boolean
Public IndiceColumns As Integer
Non dovrei aver dimenticato nulla...
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.morenosoft.com/MSVBSite/
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
---------------------------------------------------------------------------


Penso che tu abbia una struttura dell genere :
L'oggetto principale (tipo un controllo flexgrid) espone una proprietà
Columns (collection) ; ogni oggetto della collection è una classe Column ...
giusto ?
allora l'oggetto principale avrà dei metodi per gestire la collection (del
tipo Add, Remove, Count ecc..)
---------------------------------------------------------
Classe oggetto principale
---------------------------------------------------------
Public Columns as New Collection
Sub AddColumn(Label as string, Color as byte)
    Dim x as new Column
    x.Colore = Color
    x.NomeColonna = Label
    x.Index = Columns.Count
    Columns.Add x, Label
End Sub
....
---------------------------------------------------------
Classe column
---------------------------------------------------------
Public Colore as byte
Private m_NomeColonna as string
Public Index as long
Public Property Get NomeColonna() as String
    NomeColonna = m_NomeColonna
End Property
Public Property Let NomeColonna(Label) as String
    Static Fl as boolean
    If fl then
        Err.Raise <numero dell'errore, del tipo proprietà di sola lettura>
    Else
        Fl = True
        m_NomeColonna = Label
    End IF
End Property
Public Sub Hide()
    <Codice per nascondere la colonna>
    'L'indice della colonna che stai nascondendo è Me.Index (o solo Index)
End Sub
---------------------------------------------------------
dal progetto
---------------------------------------------------------
Dim Obj as new <Componente>
Obj.AddColumn "Colonna 1", vbRed            'Colonna con indice 0
Obj.AddColumn "Colonna 2", vbGreen        'Colonna con indice 1
Obj.Columns(0).Hide    'Nasconde la colonna 0
Obj.Columns(0).Index  'Restituirà 0
L'ho scritto al volo ... provalo e facci sapere
Davide