Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [VB2010 WinForms] Riferimento all'istanza/classe principale

    più d'una volta mi è servito intercettare l'istanza padre di una istanza strutturata su più livelli di classe...

    faccio un semplice esempio: ho questa classe con la sua sotto classe + classe esterna

    codice:
    'classe esterna
    Public Class TipoImmagineMan
    
        Private _Image As Image = My.Resources.NoImage
        Private _TipoStrings As TipoStrings = Nothing
        Private _Appartenenza As Object = Nothing
    
        '.....................
    
    End Class
    
    'classe dell'oggetto vero e proprio
    Public Class OggettoManutenzione
        '
        'sottoclasse dell'oggetto
        Class EventoManutenzione
            Private _KM As Long = Nothing
            Private _Data As Date = Nothing
            '.............
            Private _Appartenenza As Object = Nothing ' OggettoManutenzione di appartenza
    
        End Class
    
        Private _ID As Long = 0
        Private _Dettagli As String = Nothing
        Private _Image As TipoImmagineMan = Nothing
        Private _Voce As String = Nothing
        Private _Manutenzioni As New List(Of EventoManutenzione)
        Private _Intervallo As New EventoManutenzione
        Private _Saved As Boolean = True
        Private _Contenitore As Object = Nothing
    il riferimento che lo contiene
    
    '.............................
    
    End Class
    
    
    ' Classe (MAIN) contenitore degli oggetti
    Public Class Manu
        Inherits List(Of OggettoManutenzione)
        Private Contatore As Long = 0,
            _Saved As Boolean = True
    
    End Classe
    la classe principale é Class MANU che conterrà una lista di oggetti classe OggettoManutenzione e ogni oggetto ha elementi che puntano ad altre sotto classi e classi esterne , come TipoImmagine, EventoManutenzione

    ad esempio, da codice quando mi ritrovo una istanza della classe TipoImmagine, devo poter risalire alla istanza "oggettoManutenzione" che la contiene ed è stata associata (cioè il padre) ...lo stesso per l'altra istanza "EventoManutenzione".... per il momento ho ovviato aggiungendo alle sottoclassi una proprietà "APPArtenenza" che punta alla propria Istanza Padre che la contiene e che debbo settare ogni volta che vengono istanziate ed aggiunte alla instanza principale...

    c'è modo che io possa risalire all'stanza padre evitando di utilizzare quella proprietà APPARTENENZA?
    Michele

  2. #2

    Re: [VB2010 WinForms] Riferimento all'istanza/classe principale

    Originariamente inviato da michelecali
    c'è modo che io possa risalire all'stanza padre evitando di utilizzare quella proprietà APPARTENENZA?
    No. Se guardi nelle classi del framework in questi casi c'è sempre una proprietà denominata Parent, Owner o altri nomi simili.
    Chi non cerca trova.

  3. #3
    si... infatti ho preso spunto da quelle proprietà del framework. ..lì però quella proprietà viene automaticamente settata quando si aggiunge una istanza al padre :

    Form.Controls.add(Button1)

    il Parent del button e su Form...

    Mentre nel mio caso devo dirglielo io al momento dell'associazione. Per esempio, nel caso:

    MANUTENZIONI é l'istanza principale (classe contenitore di tutti gli oggetti)

    Manu è una manutenzione da aggiungere (Classe OggettoManutenzione):

    da cosice faccio cosi:
    codice:
    MANUTENZIONI.add(New Manu As OggettoManutenzione(MANUTENZIONI)) ' lo passo come parametro al costruttore new
    
    ' nel costruttore New ho il codice che setta la proprietà di Appartenenza sul parametro passatogli
    almeno questo si può evitare di scriverlo a ogni nuova aggiunta...! magari, lo farebbe in automatico ogni volta che aggiungo un oggetto al contenitore.. Dalla classe stessa eseguendo l'overrides della metodo ADD, da lì si potrebbe settare quella proprietà!?
    Michele

  4. #4
    La soluzione è quella di scrivere la classe Manu implementando l'interfaccia IList(Of OggettoManutenzione) e scrivendo a mano tutti i vari metodi previsti dall'interfaccia. Il metodo Add di Manu lo dovrai scrivere in questo modo:
    codice:
    Class Manu
        Implements IList(Of OggettoManutenzione)
    
        Private _mylist As New List(Of OggettoManutenzione)
    
        Public Sub Add(item As OggettoManutenzione) Implements System.Collections.Generic.ICollection(Of OggettoManutenzione).Add
            item.Appartenenza = Me
            _myList.Add(item)
        End Sub
    
        ...
    End Class
    Chi non cerca trova.

  5. #5
    ok non è un problema per me riscrivere i metodi...in questo caso avevo già gli overloads degli unici due metodi della List(Of ....) .add e .RemoveAt e tutti gli altri sono completamente personali!

    questo implements mi garba.. avevo letto la guida all'epoca non ci avevo capito molto a riguardo... adesso si!

    Grazie ancora Tas
    Michele

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.