Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Errore su inherits form

7 views
Skip to first unread message

Sacman

unread,
Nov 10, 2009, 5:52:08 PM11/10/09
to
Ri-posto per errore di digitazione.

Sto valutando VB2008 Express come alternativa ad Access.
Stavo facendo delle prove sulla ereditarietà (inherits) dei form,
da sfruttare per creare un form di base (FormBase) da cui modellare
varie form ereditate,
per esempio MainForm, SecondForm, ecc.

Pensavo fosse semplice ma poi sono incappato nel seguente codice
errore:
La classe base 'FormBase' specificata per la classe 'MainForm' non
può
essere differente dalla classe base 'System.Windows.Forms.Form' di
uno
degli altri tipi parziali.


Nel codice di MainForm pongo:
Public Class MainForm
Inherits WindowsApplication1.FormBase
End Class


Ho poi provato il progetto di esempio VB 2008 RTM Samples\Winforms
Samples\InheritForm
che si scarica da www.msnd.com e li funziona tutto regolare e non mi
sembra che ci siano
righe di codice particolari.
Non è che VB2008 Express non supporta tali fnzionalità?
o mi sono perso qualcosa (cosa forse più plausibile)
Grazie.

VITRIOL

unread,
Nov 11, 2009, 1:38:56 AM11/11/09
to
Il 10/11/2009 23.52, Sacman ha scritto:

> Pensavo fosse semplice ma poi sono incappato nel seguente codice
> errore:
> La classe base 'FormBase' specificata per la classe 'MainForm' non

> pu�


> essere differente dalla classe base 'System.Windows.Forms.Form' di
> uno
> degli altri tipi parziali.
>
>
> Nel codice di MainForm pongo:
> Public Class MainForm
> Inherits WindowsApplication1.FormBase
> End Class

http://msdn.microsoft.com/it-it/library/8d17t7cd%28VS.80%29.aspx

Tradotto: .NET non supporta l'ereditariet� multipla delle classi. Quindi
se MainForm eredita da System.Windows.Forms.Form (che � la classe base
del Framework che definisce i form), non pu� ereditare
contemporaneamente anche da un'altra classe, in questo caso FormBase.
Quando crei un form col designer questo per default eredita dalla classe
base del Framework, quindi non pu� ereditare da altro.
Una soluzione potrebbe essere visualizzare il file MainForm.Designer.vb,
e cambiare il riferimento all'ereditariet�, ma non sono assolutamente
sicuro che sia una buona idea. Magari qualcuno pi� esperto ti sapr� dire
meglio.
La cosa pi� sensata credo che sia costruirti il form via codice.

> Non � che VB2008 Express non supporta tali fnzionalit�?

Assolutamente escluso. Le versioni Express non hanno alcuna limitazione
per quanto riguarda il codice. In linea di principio il codice te lo
puoi scrivere anche con Notepad e poi compilare tutto col compilatore a
riga di comando distribuito inseme al Framework, anche senza avere
Visual Studio in nessuna versione.

--
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto pi� di semplici
FAQ! http://it.openoffice.org/doc/manuali/

Sacman

unread,
Nov 11, 2009, 2:54:09 AM11/11/09
to

> Una soluzione potrebbe essere visualizzare il file MainForm.Designer.vb,
> e cambiare il riferimento all'ereditarietà, ma non sono assolutamente
> sicuro che sia una buona idea. Magari qualcuno più esperto ti saprà dire
> meglio.

Cioè cambiarlo da un normale editor di testo?
Da interfaccia IDE non mi fa cambiare il riferimento con l'istruzione
inherits.
O forse intendi qualcos'altro?

> La cosa più sensata credo che sia costruirti il form via codice.
Cioè partire da una classe generica vuota e poi aggiungere una
interfaccia?
Tutti i post che ho letto la fanno facile, del tipo:
'mi creo il mio FormBase e poi il mio MainForm,
dichiaro la mia inherits...' e nella maggior parte dei
casi affrontano problematiche successive non così primordiali!

>
> > Non è che VB2008 Express non supporta tali fnzionalità?


>
> Assolutamente escluso. Le versioni Express non hanno alcuna limitazione
> per quanto riguarda il codice. In linea di principio il codice te lo
> puoi scrivere anche con Notepad e poi compilare tutto col compilatore a
> riga di comando distribuito inseme al Framework, anche senza avere
> Visual Studio in nessuna versione.

Intendo dire: non è che VB2008 Express rispetto alla versione
standard,
non ha le funzionalità per creare in maniera rapida questa
"derivazione" della MainForm?
Detto volgaremente un pulsante nel menù aggiungi nuovo elemento?
Grazie

VITRIOL

unread,
Nov 11, 2009, 3:10:51 AM11/11/09
to
Il 11/11/2009 8.54, Sacman ha scritto:

> Cio� cambiarlo da un normale editor di testo?


> Da interfaccia IDE non mi fa cambiare il riferimento con l'istruzione
> inherits.

In "Esplora soluzioni" fai clic su "Mostra tutti i file", e poi pri
l'albero del tuo form. Vedrai un file chiamato TuoForm.Designer.vb.
Facci doppio clic sopra.
Ma se tu hai FormBase creato col designer puoi scriverti manualmente un
form che eredita da quello. Fai Progetto > Aggiungi classe..., dagli il
nome MainForm.vb (o quello che vuoi) e poi scrivi il codice:

Public Class MainForm
Inherits FormBase

End Class

tutto qui

> Intendo dire: non � che VB2008 Express rispetto alla versione
> standard,
> non ha le funzionalit� per creare in maniera rapida questa
> "derivazione" della MainForm?
> Detto volgaremente un pulsante nel men� aggiungi nuovo elemento?
> Grazie

Ma c'�. Basta fare Progetto > Aggiungi Windows Form..., come penso che
hai fatto tu. Per� per default eredita dalla classe base del Framework.

Luca D

unread,
Nov 11, 2009, 3:35:21 AM11/11/09
to
On 11 Nov, 08:54, Sacman <d.camor...@gmail.com> wrote:
> > Una soluzione potrebbe essere visualizzare il file MainForm.Designer.vb,
> > e cambiare il riferimento all'ereditarietà, ma non sono assolutamente
> > sicuro che sia una buona idea. Magari qualcuno più esperto ti saprà dire
> > meglio.
>
> Cioè cambiarlo da un normale editor di testo?
> Da interfaccia IDE non mi fa cambiare il riferimento con l'istruzione
> inherits.
> O forse intendi qualcos'altro?

Quando crei una form in .NET 2008, vengono creati più file... in
particolare hai un MiaForm.vb che è quello dove dovresti scrivere il
tuo codice, e MiaForm.designer.vb che viene generato automaticamente
(può essere comunque modificato a mano, con un minimo di attenzione) e
contiene alcune inizializzazioni.

Se guardi il codice noti alcune cose:
- La classe è definita 'Partial'; questo fa si che tu possa spezzare 1
classe logica in più file fisici e tenere il codice più pulito, è
esattamente quello che fa il designer.
- Il codice nel file .designer contiene già l'istruzione Inherits
relativa alla form base del framework

Questo vuol dire che se tu, nel file MiaForm.vb aggiungi

Public Class MainForm
Inherits WindowsApplication1.FormBase
End Class

stai andando in conflitto con l'istruzione presente in .designer.vb,
perchè la stessa classe non può derivare da più padri in .net

Soluzioni:

- Chiudi l'editor grafico della form se è aperto, togli la riga da
MiaForm.vb, modifica quella corrispondente in MiaForm.Designer.vb; se
riapri l'editor vedrai che è corretto adesso.
- Più semplicemente, quando aggiungi una nuova finestra al progetto
usa il menù Add-Windows form...
nella finestra che compare non guardare solo i "Common Item"> ma
scegli a sinistra la voce "Windows Form" e vedrai che trovi l'elemento
"Inherited Form", questo ti fa selezionare in una seconda schermata da
cosa vuoi derivare e a quel punto pensa lui a scrivere il
file .designer.vb in maniera corretta.

ciao

Sacman

unread,
Nov 11, 2009, 10:37:26 AM11/11/09
to
> Soluzioni:
>
> - Chiudi l'editor grafico della form se è aperto, togli la riga da
> MiaForm.vb, modifica quella corrispondente in MiaForm.Designer.vb; se
> riapri l'editor vedrai che è corretto adesso.


Sulla correzione manuale da editor ci dovrei essere,
stasera provo.

> - Più semplicemente, quando aggiungi una nuova finestra al progetto
> usa il menù Add-Windows form...
> nella finestra che compare non guardare solo i "Common Item"> ma
> scegli a sinistra la voce "Windows Form" e vedrai che trovi l'elemento
> "Inherited Form", questo ti fa selezionare in una seconda schermata da
> cosa vuoi derivare e a quel punto pensa lui a scrivere il
> file .designer.vb in maniera corretta.

Questi wizard a cui alludi, ci sono in VB2008 Express?
A me sembra di non avere visto nulla. Stasera controllo.

Cmq molissime grazie.

0 new messages