Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - (VB.NET)  richiamare funzione resid. in altro form
Forum - C# / VB.NET - (VB.NET) richiamare funzione resid. in altro form

Avatar
fiftyfour (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/02/2008

Segnala al moderatore
Postato alle 15:03
Mercoledì, 27/02/2008
Questo topic è stato chiuso dal moderatore

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:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim CurrentForm As Form
  2.    Set CurrentForm = Screen.ActiveForm
  3.    CurrentForm.Salva
  4.     ...


ora, in VB.NET, provo a fare:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim CurrentForm As Form = TryCast(ActiveForm, Form)
  2.       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 il 27/02/2008 alle 20:52
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:55
Mercoledì, 27/02/2008
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:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim CurrentForm As FormSecondario = _
  2.     TryCast(ActiveForm, FormSecondario)


La mia guida può orientarti alla programmazione ad oggetti, che non puoi non conoscere in Vb.Net.

PM
Avatar
fiftyfour (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/02/2008

Segnala al moderatore
Postato alle 19:32
Giovedì, 28/02/2008
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.

PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 20:10
Giovedì, 28/02/2008
Testo quotato

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:
http://totem.altervista.org/guida/versione2/A44.php

PM
Avatar
fiftyfour (Normal User)
Newbie


Messaggi: 3
Iscritto: 27/02/2008

Segnala al moderatore
Postato alle 21:07
Giovedì, 28/02/2008
Grazie Piero, mi hai portato per mano....
La soluzione:
Codice sorgente - presumibilmente Plain Text

  1.  


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.

PM