Newsgroup: it.comp.lang.visual-basic
Titolo: ?Classe collection

Ho due classi, DropDownMenu e MenuItem, mi servono per visualizzare un 
menupoup in uno UserControl tipo commandButton.
Nello UserControl ho instanziato public DropDownItem As New DropDownMenu e 
Set DropDownItem = New DropDownMenu.
In DropDownMenu ho instanziato la collection cItemCollection.
Nel form che contiene lo usercontrol(il bottone), per inserire gli item del 
menu scrivo:
Button1.DropDownItem.Add 1, "Uno", "Apri"
Questa è la routine in DropDownItem
Public Function Add(ByVal Index As Integer, Optional ByVal Key As String, _
                Optional ByVal Caption As String) As MenuItem
    Dim cNewItem As MenuItem
    Set cNewItem = New MenuItem
    cNewItem.MenuHandle = hMenu
    cNewItem.AddNewItem Index, Key, Caption
    cItemCollection.Add cNewItem, Key
    Set Add = cNewItem
    Set cNewItem = Nothing
End Function
Questa è la routine in MenuItem
Friend Sub AddNewItem(ByVal Index As Integer, Optional ByVal Key As String, 
_
                Optional ByVal Caption As String)
    intIndex = Index
    strKey = Key
    strCaption = Caption
    Dim lngFlag As Long
    If Caption = "-" Then lngFlag = MF_SEPARATOR
    Call AppendMenu(hMenu, lngFlag , Index, Caption)
End Sub
Questa è La routine evento per intercettare il menu selezionato
Private Sub Button1_ItemMenuClick(ByVal ItemMenu As MenuItem)
Il problema è che l'intellisense mi visualizza oltre alle proprietà (Index, 
Key e Caption) anche la sub AddNewItem dichiarata come Friend.
Ho provato a settare "Nascondi questo membro" dagli attributi di routine ma 
non c'è verso.
Non so se il codice è giusto ma funziona tranne quel particolare.
La mia domanda e questa:
Come posso nascondere la sub AddNewItem?
Mi dite un modo alternativo
Grazie
Carmelo 

carmelo ha scritto:

[FRIEND]
Modifica la definizione di una routine in un modulo di form o in un
modulo di classe allo scopo di poterla richiamare da moduli esterni
alla classe, ma che fanno parte del progetto all'interno del quale
viene definita la classe. Non è possibile utilizzare le routine Friend
nei moduli standard.
Le routine Public di una classe possono essere richiamate da qualsiasi
posizione, anche dai controller delle istanze della classe. La
dichiarazione di una routine Private impedisce ai controller
dell'oggetto di poterla richiamare, ma impedisce anche di richiamarla
dal progetto nel quale è definita la classe. Friend consente di
rendere la routine visibile in tutto il progetto, ma non per un
controller di un'istanza dell'oggetto. Friend può comparire solo nei
moduli di form e di classe e può modificare i nomi di routine, ma non
le variabili o i tipi. Le routine di una classe possono accedere alle
routine Friend di tutte le altri classi di un progetto. Le routine
Friend non compaiono nella libreria dei tipi della relativa classe e
non supportano l'associazione tardiva.
Saluti
@Alex

[FRIEND]
Modifica la definizione di una routine in un modulo di form o in un
modulo di classe allo scopo di poterla richiamare da moduli esterni
alla classe, ma che fanno parte del progetto all'interno del quale
viene definita la classe. Non è possibile utilizzare le routine Friend
nei moduli standard.
Le routine Public di una classe possono essere richiamate da qualsiasi
posizione, anche dai controller delle istanze della classe. La
dichiarazione di una routine Private impedisce ai controller
dell'oggetto di poterla richiamare, ma impedisce anche di richiamarla
dal progetto nel quale è definita la classe. Friend consente di
rendere la routine visibile in tutto il progetto, ma non per un
controller di un'istanza dell'oggetto. Friend può comparire solo nei
moduli di form e di classe e può modificare i nomi di routine, ma non
le variabili o i tipi. Le routine di una classe possono accedere alle
routine Friend di tutte le altri classi di un progetto. Le routine
Friend non compaiono nella libreria dei tipi della relativa classe e
non supportano l'associazione tardiva.
Saluti
@Alex
Tutto questo lo avevo letto, infatti avevo cambiato da friend a public 
nascondendo il membro da attributi di routine senza alcun risultato.
Volevo sapere se c'è un'alternativa alla routine AddNewItem dove passo i 
dati alla classe MenuItem.
Non posso passare i dati alle proprietà direttamente perche Index e key 
devono essere in sola lettura.
Ciao
Carmelo 

 devono essere in sola lettura.
eh?
Ciao 

 Non capisco il problema.
Il problema è che AddNewItem, mi serve solo per passare i dati dalla classe 
DropDownMenu alla classe MenuItem.
In pratica non posso scrivere  cNewItem.Index=Index,  perchè la property 
Index, deve essere in sola lettura.
ma voglio rendere AddNewItem, invisibile nell'evento del bottone Private Sub 
Button1_ItemMenuClick(ByVal ItemMenu As MenuItem)
 Ciao
Carmelo