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 - Classi in vb.net
Forum - C# / VB.NET - Classi in vb.net

Avatar
mitor (Normal User)
Pro


Messaggi: 73
Iscritto: 01/08/2007

Segnala al moderatore
Postato alle 12:29
Lunedì, 28/04/2008
Ciao a tutti,voglio stripparmi un pò con le classi in vb.net.
Sono riuscito facilmente a creare la mia dll e importarla in un windows form..ora riesco anche a richiamare la stessa dll in questo modo (dopo averla aggiunta come riferimento naturalmente)
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim lamiaddl as ClassLibrary1.Class1
  2. lamiaddl.Messaggio



ora però non capisco come assegnare ad'esempio a messaggio una stringa di testo...ecco un'esempio..la dll è composta cosi in questo caso:
Codice sorgente - presumibilmente VB.NET

  1. Public Sub lamiadll(ByVal Messaggio As String)
  2. Messaggio="TESTO DI PROVA"
  3.     End Sub



essendo che non ho mai provato a gestire una dll,ho sicuramente fatto un'errore madornale..poichè nella windows form non mi permette di gestire il tutto..oppure mi dice che la stringa Messaggio è vuota...potete darmi qualche consiglio?

PM Quote
Avatar
Thejsuter (Normal User)
Rookie


Messaggi: 27
Iscritto: 12/04/2008

Segnala al moderatore
Postato alle 16:17
Lunedì, 28/04/2008
:-|

Dipende da che ci vuoi fare

1) Hai mancato la definizione finale

Codice sorgente - presumibilmente VB.NET

  1. Public Sub lamiadll(ByVal Messaggio As String) as String



Devi dichiararla così,

Se richiedi valori String devi anche specificarlo


la stessa cosa per altri tipi di valori
tipo numerico?

Codice sorgente - presumibilmente VB.NET

  1. Public Sub lamiadll(ByVal Numero As Integer) as Integer



ecc. ecc.


Ma non ho capito bene cosa vuoi farci con quella string se mostrare un Messaggio ricavando il testo da quella string non credi che sia una cosa utile
perche puoi usare direttamente il msgbox

Se invece vuoi che il testo che hai inviato in quella variabile puoi recuperarlo in altre parti bhe semplice devi dichiarare che la Variabile Messaggio deve essere globale.

Tipo prima delle funzioni basta dichiararla
subito dopo la classe


Codice sorgente - presumibilmente VB.NET

  1. Public Messaggio as String
  2.  
  3.  Public Sub lamiadll(ByVal MessaggioRicevuto As String) as String
  4.  
  5. Messaggio = MessaggioRicevuto
  6.  
  7.     End Sub



Spero di aver capito il tuo problema altrimenti non sò.

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:59
Lunedì, 28/04/2008
Entrambi evete fatto dei grossi errori.

Prima di tutto, non si può mai definire un PROCEDURA con un tipo di ritorno, ma semmai una FUNZIONE:
Codice sorgente - presumibilmente Delphi

  1. Public Function Show(ByVal Message As String) As String



In secondo luogo, hai dichiarato "lamiadll" come una variabile di tipo Class1, mentre poi l'hai usata come nome di un metodo: deciditi!
Poi, la dll non è altro che una libreria di classi, ossia un insieme di classi eventualmente raggruppate sotto un namespace, quindi al massimo puoi avere:
Codice sorgente - presumibilmente VB.NET

  1. Public Class LaMiaDll
  2.   Public Sub Show(ByVal Message As String)
  3.     MessageBox.Show(Message)
  4.   End Sub
  5. End Class
  6.  
  7. ...
  8.  
  9. Dim A As New LaMiaDll
  10. A.Show("Ciao")



E ancora, se il tuo problema è immagazzinare un valore, allore devi fare ricorso a proprietà, ma dato che non hai ancora imparato bene le classi (che tra l'altro sono INDISPENSABILI in un linguaggio ad oggetti), possiamo limitarci a variabili pubbliche:
Codice sorgente - presumibilmente VB.NET

  1. Public Class LaMiaDll
  2.   Public Message As String
  3.   Public Sub Show()
  4.     MessageBox.Show(Message)
  5.   End Sub
  6. End Class
  7.  
  8. ...
  9.  
  10. Dim A As New LaMiaDll
  11. A.Message = "Ciao"
  12. A.Show()



Come ultima cosa... non ho capito bene la domanda... :rotfl:

PM Quote
Avatar
Thejsuter (Normal User)
Rookie


Messaggi: 27
Iscritto: 12/04/2008

Segnala al moderatore
Postato alle 19:19
Lunedì, 28/04/2008
LoL :rotfl: vero omg

Non avevo fatto caso all'istruzione

avevo copiato direttamente il codice convinto che era scritto bene lol


Cmq da quel che ho capito ( O almeno spero )
Vuole far in modo che da una parte memorizzi un messaggio e da un'altro Form possa riceverlo.

cmq la funzione precisa e questa

Codice sorgente - presumibilmente Delphi

  1. Public Class LaMiaDll
  2. Public Message As String
  3.  
  4.  
  5. Public Shared Function Memorizza (ByVal MessaggioRicevuto as  String) as String
  6.  
  7. Message = MessaggioRicevuto
  8.  
  9. End Function
  10.  
  11. End Class



Mentre nel form Basterà semplicemente importare la classe

e richiamare la variabile Globale.


Lato Form1

Codice sorgente - presumibilmente VB.NET

  1. Private sub test()
  2.  
  3. 'Settaggio di un Messaggio
  4.  
  5. LaMiaDll.Memorizza("Test")
  6.  
  7. End Sub




Lato Form2

Codice sorgente - presumibilmente VB.NET

  1. Private sub Test()
  2.  
  3. 'Recupero del Valore
  4.  
  5. dim Messaggio = LaMiaDll.Message
  6.  
  7. msgbox(Messaggio)
  8.  
  9. End Sub



Cosi' Dovrebbe essere giusto almeno credo
Lo Scrivo Immaginando il Risultato non dall'editor
:rotfl:

Ultima modifica effettuata da Thejsuter il 28/04/2008 alle 19:25
PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:09
Martedì, 29/04/2008
Sì può darsi che sia così, ma aspettiamo una risposta prima.

P.S.: non c'era bisogno di una funzione, bastava anche una procedura.

PM Quote
Avatar
mitor (Normal User)
Pro


Messaggi: 73
Iscritto: 01/08/2007

Segnala al moderatore
Postato alle 10:01
Mercoledì, 30/04/2008
Testo quotato

Postato originariamente da Il Totem:

Sì può darsi che sia così, ma aspettiamo una risposta prima.

P.S.: non c'era bisogno di una funzione, bastava anche una procedura.


Allora,tutti gli esempi postati sono significativi..però non mi permettono di capire il funzionamento delle classi..ho letto parecchie guide su internet ma nulla...se vorrei ad'esempio,creare una classe (dll) e inserirci dentro parecchie dichiarazioni,ad'esempio:

Dim a As string = "TESTO"
Dim b As string = "Testo2"

e via dicendo,poi dalla windows form,mi importo la mia dll compilata precedentemente,e posso utilizzare i valori dichiarati prima nella dll.
quindi magari richiamare un msgbox con dentro:
Msgbox(a)
questo è un'esempio proprio base,per poi utilizzarlo per funzioni avanzate..cosi da creare un "grosso" programma che possa prendere i riferimenti in una o più dll per gestire meglio il tutto.

:D

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:32
Mercoledì, 30/04/2008
Allora, prima chiarimo una cosa: la DLL non è una classe. Infatti, non potresti dire che un programma console compilato in vb.net sia un modulo, no? Allo stesso modo non lo puoi dire di una DLL.
Essa è un assembly, ossia un blocco costitutivo di un'applicazione .Net e contiene non solo del codice, ma anche risorse e metadati.
Detto ciò, il codice che la DLL contiene è costituito da una o più classi: ecco perchè la si chiama anche libreria di classi.
In essa NON si possono definire variabili globali come ho inteso dalla tua richiesta, poiché una variabile deve sempre essere inclusa almeno in una classe o in un metodo. Perciò quello che devi fare è inscrivere tale variabile in una classe. Dato che sarà visibile al di fuori della classe, essa deve essere pubblica e inoltre statica, poiché il suo valore sarà uguale sempre ogni volta che la si richiama (variabile di classe) e non cambierà in parallelo con gli oggetti (variabile d'istanza). Quindi:
Codice sorgente - presumibilmente VB.NET

  1. Public Class UnaClasse
  2.   Public Shared Testo1 As String = "Messaggio 1"
  3. End Class


Parimenti, se vuoi un metodo sempre accessibile dovrà anch'esso essere statico. Ma a questo punto ti suggerirei di usare una classe statica, ossia un modulo...

PM Quote