Classe form Astratta

martedì 22 gennaio 2008 - 15.13

Teech Profilo | Expert

Ho creato un form rendendolo una classe astratta agendo sul Designer. Ho anche reso Protected la Sub InizializeComponent come di seguito riportato:
Partial MustInherit Class MioFormBase Inherits System.Windows.Forms.Form ... Protected Overridable Sub InitializeComponent() ... End Sub End Class
Ho ereditato la classe astratta in una classe figlia modificando sempre il designer di un form:
Partial Class MioFormFiglio Inherits MioFormBase ... Private Overloads Sub InitializeComponent() MyBase.InitializeComponent() End Sub End Class
Nel codice del form figlio ho inserito una Sub New in quanto il mio form base ne aveva uno
Public Class MioFormFiglio ... Sub New() MyBase.New() InitializeComponent() End Sub ... End Class
Sembrava tutto a posto ma la finestra di progettazione del mio form figlio mi restituisce un errore:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Sapete perchè? Dove ho sbagliato?

Grazie dell'aiuto
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

alx_81 Profilo | Guru

>Sapete perchè? Dove ho sbagliato?
http://technet.microsoft.com/it-it/library/2xh82hxd.aspx

Risposta glaciale: Impossibile fare così

Perchè non fai una form normale col designer e metti tutti i controlli che ti servono e poi non aggiungi una InheritedForm?
E' proprio un Item del progetto di Visual Studio. Così erediti dalla form che prendi come riferimento.

>Grazie dell'aiuto
Di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Teech Profilo | Expert

Tirando le somme, l'unico problema è che non vedo il form base come finestra di progettazione, però, il "flusso" è perfettamente funzionante.
Sulle classi figlie, se volessi mai effettuare una variazione a livello di designer (ad esempio aggiungere un Button), non posso a livello "visivo" ma posso da codice.

Ho letto 100 volte la frase scritta nel link che mi hai dato:
"L'errore si è verificato poiché la classe base dell'oggetto passato alla finestra di progettazione è astratta. Questa operazione non è consentita."
L'operazione non consentita è passare un oggetto astratto alla finestra di progettazione, non eseguirlo...

Il fatto è che mi serve questa maschera sempre uguale, con dei comportamenti di base identici e solo per alcuni aspetti differisce dalla maschera di vero e proprio utilizzo. La maschera di base in se non fa nulla o per lo meno non completa le operazioni, quindi è necessario che nessuno la utilizzi (da qui il fatto di renderla astratta).

Riassumendo, è l'IDE che non mi permette di visualizzare Form che ereditano da "Form Astratti" ma la tecnica è funzionante.

Ciao e grazie del link!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5