Newsgroup: it.comp.lang.visual-basic
Titolo: Classe component in vb.net

Ho la necessita di fornire vari form dove tutti utilizzano le stesse 
funzioni (strumentazioni differenti). Il primo approccio è stato quello di 
creare tanti form per quanti ne avevo bisogno, ma mi rendo conto che in 
questo modo scrivo lo stesso ed identico codice per tutti i form creati, con 
la differenza dei soli componenti per ogni form.
Volevo creare lo stesso tanti form, ma caricarli in una pagina con un 
contenitore (va bene Panel), ma è un'approccio che non ho mai usato. Non 
saprei come distruggere quello in uso e caricare un nuovo form nel 
contenitore, lasciando la programmazione del form inalterata. Chi mi avvia a 
questo genere di approccio, evitando di riscrivere per ognuno dei form le 
stesse procedure (sto parlando di 6 form)
Grazie a tutti
Enzo 

Ciao Enzo,
non sono sicuro di aver capito bene.
Se il tuo problema è che ogni form ha classi, proprietà o funzioni nonchè 
alcuni controlli in comune, ti crei il form base che fungerà da template.
Gli altri form erediteranno dal template.
Ermes 

 Ermes
Il form in questione ha degli strumenti analogici (faccio un esempio) 
contagiri dx gli altri form hanno lo stesso strumento ma di forma differente 
e poi ci sono quelli di forma digitale chiamato sempre contagiri dx e che 
vanno a leggere sempre sullo stesso can bus prelevando i dati e 
visualizzando gli stessi allo strumento. Inoltre ogni form ha una serie di 
pulsanti in comune che vanno a richiamare altri sottoform per la 
visualizzazione di altri parametri. Esempio
Button1.click mioform.showdialog()
e questo č presente in tutti i form.
Spero di essere stato chiaro e se fosse possibile inserire qualche piccolo 
esempio per iniziare a provare
grazie 

Ciao,
crei un form che ha elementi comuni a tutti (sia controlli che 
proprietà,sub,funzioni,eventi ecc.)
Lo salvi e lo chiami per esempio frmTemplate
Apri una nuova classe e la chiami per esempio frmDigitale
Erediti il template
Public Class frmDigitale
    Inherits frmTemplate
End Class
Ora sarebbe buona norma salvare, compilare. A questo punto hai il nuovo form 
su cui potrai sistemare tutti i controlli che vuoi. Vedrai naturalmente 
tutte le proprietà, sub, funzioni, classi, oggetti ecc. del template.
Fatto questo ti avrà creato una InitializeComponent.
Dovrai dichiarare su frmDigitale una New, quindi ti troverai probabilmente 
in questa situazione:
Public Class frmDigitale
    Inherits frmTemplate
    Public Sub New()    'devi creare questa
        MyBase.New() 'obbligatorio per caricare le eredità (prima riga da 
eseguire qui nel New)
        InitializeComponent() ' creata nel frmDigitale non appena hai 
aggiunto un nuovo controllo
        'eventuali inizializzazioni che ti servono
        ......
        ......
    End Sub
    Private Sub InitializeComponent() 'crata da VB dopo aver inserito nuovi 
controlli da inizializzare
        ......
        ......
    End Sub
End Class
Ti ho fatto naturalmente un esempio terra terra ma, anche se questo dovrebbe 
già bastarti, da qui in poi se ti serve, potrai operare con la classe 
frmTemplate con tutti i criteri OOP (Overload, poliform ecc)
Ermes

 ha scritto nel messaggio 
news:4ba4aba7$0$823$4faf...@reader5.news.tin.it...


dopo aver fatto le prime prove le prime delusioni
questo il codice semplice senza troppi fronzoli
Public Class Class1
    Inherits FrmAnalog1
    Public Sub New()
        MyBase.New()
    End Sub
End Class
se faccio partire il progetto con Class1 mi visualizza perfettamente quello 
che è in frmAnalog1 con tutti i pulsanti e strumenti presenti
se vado in designer per inserire i miei controlli differenti da analog1 mi 
mostra la pagina di errore con questa dicitura
To prevent possible data loss before loading the designer, the following 
errors must be resolved:
 1 Error
  The service System.Windows.Forms.Design.IEventHandlerService already 
exists in the service container. Parameter name: serviceType
Instances of this error (1)
1.   Show Call Stack
at System.ComponentModel.Design.ServiceContainer.AddService(Type 
serviceType, ServiceCreatorCallback callback, Boolean promote)
at System.ComponentModel.Design.ServiceContainer.AddService(Type 
serviceType, ServiceCreatorCallback callback)
at 
System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IServiceContainer.AddService(Type 
serviceType, ServiceCreatorCallback callback)
at System.Windows.Forms.Design.DocumentDesigner.Initialize(IComponent 
component)
at System.Windows.Forms.Design.FormDocumentDesigner.Initialize(IComponent 
component)
at 
System.ComponentModel.Design.DesignerHost.AddToContainerPostProcess(IComponent 
component, String name, IContainer containerToAddTo)
at System.ComponentModel.Design.DesignerHost.Add(IComponent component, 
String name)
at 
System.ComponentModel.Design.DesignerHost.System.ComponentModel.Design.IDesignerHost.CreateComponent(Type 
componentType, String name)
at 
System.ComponentModel.Design.Serialization.DesignerSerializationManager.CreateInstance(Type 
type, ICollection arguments, String name, Boolean addToContainer)
at 
System.ComponentModel.Design.Serialization.DesignerSerializationManager.System.ComponentModel.Design.Serialization.IDesignerSerializationManager.CreateInstance(Type 
type, ICollection arguments, String name, Boolean addToContainer)
at 
System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager 
manager, CodeTypeDeclaration declaration)
at 
System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager 
manager)
at 
Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager 
serializationManager)
at 
System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost 
host)
e cosa cavolo devo correggere in questo casino?????
 

 mostra la pagina di errore con questa dicitura
Quando cominci ad utilizzare l'ereditarietà delle form devi mettere in
conto che il designer occasionalmente farà i capricci... a volte basta
un semplice rebuild per sistemare tutto.
Un'altra cosa che dovresti cominciare a fare d'abitudine è racchiudere
tutto il codice degli eventuali eventi Form_Load con
If Not Me.DesignMode Then
  ...
End If
perchè l'evento potrebbe venire scatenato *in design* quando apri una
finestra derivata da quella in questione.