23/01/10 17:17
growning
Postato originariamente da Il Totem:
L'idea è questa: dichiara una nuova interfaccia che imponga l'implementazione di quella sub, ad esempio:
Interface IMyInterface
Sub NomeSub()
End Interface
Quindi implementala in ogni form che la label dovrà richiamare:
Class Form1
Implements IMyInterface
Sub SUBForm() Implements IMyInterface.NomeSub
'...
End Sub
End Class
Ora dichiara, nella classe myLabel, un dizionario che associa al nome di un form la sua istanza. Il dizionario deve essere tipizzato in modo da contenere elementi di tipo IMyInterface:
Class myLabel
Inherits Label
Private Forms As New Dictionary(Of String, IMyInterface)
Private form1 As Form1
'...
Sub New()
MyBase.New()
Forms.Add("form1", form1)
'...
End Sub
Sub OnDoubleClick()
'...
Forms(MyBase.Parent.Name).NomeSub()
End Sub
End Class
Ciao, ho provato il tuo codice, ma all'apertura del form ricevo questo errore:
Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Il form ha fatto riferimento a se stesso durante la costruzione da un'istanza predefinita e si è verificata una ricorsione infinita. All'interno del costruttore del form fare riferimento al form utilizzando 'Me.'
Ho provato a sostituire (anche se non c'entra molto)
Forms.Add("form1", form1)
con
Forms.Add(mybase.parent.name, mybase.parent)
e ricevo quest'errore:
Errore durante la creazione del form. Per informazioni dettagliate vedere Exception.InnerException. Errore: Riferimento a un oggetto non impostato su un'istanza di oggetto.
Ultima modifica effettuata da growning 23/01/10 20:14
aaa
25/01/10 11:14
Il Totem
Ovviamente non puoi aggiungere form1 alla collezione Forms da form1, poiché per creare un'istanza di form1 viene richiamata la sub New, la quale aggiunge la nuova label, la quale crea a sua volta un'altra istanza di form1, la quale crea una nuova label, e così via all'infinito.
form1 era solo un esempio. Dovrai aggiungere alla collezione Forms i form esistenti, magari tramite My.Forms.
Per quanto riguarda il secondo errore, durante la creazione della label, la proprietà Parent non è ancora impostata, perciò è nulla.
aaa