Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
27/02/08 14:03
fiftyfour
Salve,
sto tentando di convertire del codice scritto in VB6 al nuovo VB.NET (versione 2008), ma resto inesorabilmente bloccato su questo problema:
nel form principale del programma (Menù;) esiste una toolbar con diversi tasti funzione ( es. Nuovo, Salva, ecc.)
quando, all'interno di un form secondario, premo uno di questi tasti, una routine del form principale deve richiamare una routine residente nel form secondario ( ad es. Salva), cosa che avveniva regolarmente nella versione VB6:
   Dim CurrentForm As Form
   Set CurrentForm = Screen.ActiveForm
   CurrentForm.Salva
    ...

ora, in VB.NET, provo a fare:
      Dim CurrentForm As Form = TryCast(ActiveForm, Form)
      CurrentForm.Salva()


ma mi compare il messaggio di errore:
Errore 90    'Salva' non è un membro di 'System.Windows.Forms.Form'.    

Il problema è che con la programmazione ad oggetti sono a piedi, dovrò ricominciare quasi da zero.
C'è qualcuno che può aiutarmi?
Vi ringrazio anticipatamente.
Ultima modifica effettuata da Il Totem 27/02/08 19:52
aaa
27/02/08 19:55
Il Totem
Forse non lo sai ma quando crei un nuovo form, crei anche una nuova classe che rappresenta quel form. Quindi nel casting devi convertire in quello e non in un form generico, ad esempio:
Dim CurrentForm As FormSecondario = _
    TryCast(ActiveForm, FormSecondario)

La mia guida può orientarti alla programmazione ad oggetti, che non puoi non conoscere in Vb.Net.
aaa
28/02/08 18:32
fiftyfour
Grazie mille per l'autorevole intervento.
Se ho ben capito, il casting deve riferire ad un'oggetto specifico (nel ns. esempio 'FormSecondario') e non ad un oggetto generico tipo 'Form'; bene.
Ma se il form secondario che ha scatenato l'evento Tasto_Click (membro del form principale) non è conoscibile a priori? Evidentemente non ho ancora capito niente.
Complimenti per la bellissima guida, sto cominciando a consultarla, inoltre ho intenzione di acquistare un paio di testi, sono consapevole che non andrò molto lontano se non mi ficco la OOP in testa; il peccato originale è stato quello di ritenere il VB.NET un Up del VB6, povero me. Ma io ho la testa dura...
Grazie ancora e spero di ricevere ancora qlc aiutino.
aaa
28/02/08 19:10
Il Totem
Postato originariamente da fiftyfour:

Grazie mille per l'autorevole intervento.
Se ho ben capito, il casting deve riferire ad un'oggetto specifico (nel ns. esempio 'FormSecondario') e non ad un oggetto generico tipo 'Form'; bene.
Ma se il form secondario che ha scatenato l'evento Tasto_Click (membro del form principale) non è conoscibile a priori? Evidentemente non ho ancora capito niente.
Complimenti per la bellissima guida, sto cominciando a consultarla, inoltre ho intenzione di acquistare un paio di testi, sono consapevole che non andrò molto lontano se non mi ficco la OOP in testa; il peccato originale è stato quello di ritenere il VB.NET un Up del VB6, povero me. Ma io ho la testa dura...
Grazie ancora e spero di ricevere ancora qlc aiutino.

Se non sai a priori il tipo necessario, l'unica cosa che puoi fare è attuare un Late Binding, ossia dichiarare il tuo oggetto di tipo Object e richiamarne la funzione. Per ulteriori informazioni su questa tecnica, vedi:
totem.altervista.org/guida/versione2/…
aaa
28/02/08 20:07
fiftyfour
Grazie Piero, mi hai portato per mano....
La soluzione:


Dim CurrentForm As Object = Me.ActiveMdiChild
dove Object consente il late binding e ActiveMdiChild sostituisce il vecchi ActiveForm che come proprietà dell'oggetto Screen non esiste più!!!
Come al solito, le soluzioni migliori sono le più semplici...
Alla prossima.
aaa