PDA

View Full Version : [.Net]Conversione da C# a VB.Net


RaouL_BennetH
28-09-2009, 11:02
Ciao a tutti :)

Devo utilizzare una libreria che mi sono fatto in C# in un progetto Vb.Net

Messo il reference al progetto, devo ora richiamare un metodo che in C# è:



GUIResource.FormDialog fd = new GUIResource.FormDialog(10);
System.Threading.Thread t = new System.Threading.Thread(fd.WaitMessage);

t.Start();



L'equivalente che ho scritto in Vb è:



Dim fd as New GUIResource.FormDialog(10)
Dim t as New System.Threading.Thread(fd.WaitMessage)
t.Start()



Ma in Vb il compilatore mi segnala che:


Expression does not produce a value


Grazie a tutti :)

RaouL.

RaouL_BennetH
28-09-2009, 11:05
Come non detto:



Dim t as New System.Threading.Thread(AddressOf fd.WaitMessage)

MarcoGG
28-09-2009, 12:17
Devo utilizzare una libreria che mi sono fatto in C# in un progetto Vb.Net


Oppure compilare la libreria C# come DLL, e usarla in VB... ;)

RaouL_BennetH
28-09-2009, 13:16
Oppure compilare la libreria C# come DLL, e usarla in VB... ;)

Ciao MarcoGG :)

Si, in effetti è molto più pratico :)

Ne approfitto visto che sei qui :p

Ma si può fare anche il contrario?

Cioè, in considerazione del fatto che in vb.net ci sono moltissime funzioni matematiche già pronte e disponibili, di più semplice implementazione ed utilizzo, potrei anche farmi la mia class library in vb da usare in soluzioni c# ?


Grazie mille :)

RaouL.

MarcoGG
28-09-2009, 13:41
Ma si può fare anche il contrario?

Cioè, in considerazione del fatto che in vb.net ci sono moltissime funzioni matematiche già pronte e disponibili, di più semplice implementazione ed utilizzo, potrei anche farmi la mia class library in vb da usare in soluzioni c# ?


Che io sappia Sì ! Una delle caratteristiche più interessanti della piattaforma .NET sta appunto in questo. :cool:

Ammetto di non aver sperimentato questo fatto in tutte le possibili vie, ma posso dirti che recentemente ho usato in un progetto VB.NET diverse dll, abbastanza complesse, create in C# senza problemi.
La stessa iTextSharp si può usare benissimo in VB.NET.

Se alludi allo spacename Math ( Math.Abs, Math.Acos, ecc... ), è disponibile anche in C#. In ogni caso, nessun problema. ;)

RaouL_BennetH
28-09-2009, 16:16
Ottima cosa !

Lo dico perchè spesso per trattare i dati a livello di form tra vb.net e c# c'è differenza, nel senso che nel primo fortunatamente non si devono specificare molti cast (per es. un valore che dev'essere intero può essere tranquillamente letto come txtQualcosa.Text, senza fare int.Parse(blabla))

Per le funzioni matematiche ho fatto un pò di confusione, alludevo a diverse funzioni per la manipolazione delle date.

Credo quindi che mi semplifico la vita lasciandomi soltanto la gestione della UI con Vb.

....Una domandina al volo per evitare di aprire un altro 3d:

Te ne intendi dello strumento per i report integrato in visual studio ? (ReportViewer).

Se si, cercavo un modo per preservare delle formule presenti nel report quando lo esporto in excel, ma non ho ancora trovato una soluzione....

Grazie ancora :)

RaouL.

MarcoGG
28-09-2009, 18:03
Ottima cosa !
Lo dico perchè spesso per trattare i dati a livello di form tra vb.net e c# c'è differenza, nel senso che nel primo fortunatamente non si devono specificare molti cast (per es. un valore che dev'essere intero può essere tranquillamente letto come txtQualcosa.Text, senza fare int.Parse(blabla))


Questo è uno dei tanti "miti" da sfatare sulle differenze tra VB.NET e C#.
Io sono tra quelli ( molti ) che considerano un certo cast implicito come una gran comodità, e non un difetto. Molti invece storcono il naso. Beh, non ne hanno motivo. In realtà c'è un modo molto semplice per impedire a VB.NET di passare per buona una cosa come :
Dim a As Integer = TextBox1.Text
Basta impostare nelle opzioni di compilazione Option Strict = ON, che di default è OFF. ;)


Per le funzioni matematiche ho fatto un pò di confusione, alludevo a diverse funzioni per la manipolazione delle date.


Allora alludi allo spacename DateAndTime, che comunque si può usare benissimo anche da C#, referenziando Microsoft.VisualBasic. Certo mi rendo conto che per molti C-sharpiani è un bello scorno ! :p


Te ne intendi dello strumento per i report integrato in visual studio ? (ReportViewer).

Se si, cercavo un modo per preservare delle formule presenti nel report quando lo esporto in excel, ma non ho ancora trovato una soluzione....


No, ReportViewer non l'ho mai usato. Perchè, esporti su Excel e perdi le formule ?

||ElChE||88
28-09-2009, 18:20
Allora alludi allo spacename DateAndTime, che comunque si può usare benissimo anche da C#, referenziando Microsoft.VisualBasic. Certo mi rendo conto che per molti C-sharpiani è un bello scorno ! :p
Chi usa Microsoft.VisualBasic in C# andrebbe fucilato :asd: (essendo sostanzialmente una libreria per facilitare il passaggio dal VB6 al VB.Net (http://msdn.microsoft.com/en-us/library/aa289509%28VS.71%29.aspx))

PS: namespace :D
PS2: Che c'è di male nell'universale DateTime?

MarcoGG
28-09-2009, 20:05
Chi usa Microsoft.VisualBasic in C# andrebbe fucilato :asd: (essendo sostanzialmente una libreria per facilitare il passaggio dal VB6 al VB.Net (http://msdn.microsoft.com/en-us/library/aa289509%28VS.71%29.aspx))


Lo usano, lo usano, lascia fare... :D
Di nascosto, ma lo usano.


PS: namespace :D


Ho scritto 2 volte spacename ! :doh: :D
Vabbeh, la stanchezza...


PS2: Che c'è di male nell'universale DateTime?


DateAndTime.DateDiff(), ad esempio...
DateTime.DateDiff() la vedo un po' dura... :stordita:

||ElChE||88
28-09-2009, 20:12
Lo usano, lo usano, lascia fare... :D
Di nascosto, ma lo usano.
Andrebbero radiati dall'ordine dei programmatori C#. :O
DateAndTime.DateDiff(), ad esempio...
DateTime.DateDiff() la vedo un po' dura... :stordita:
Che cosa fa che non si possa fare con DateTime e TimeSpan?

MarcoGG
28-09-2009, 21:02
Andrebbero radiati dall'ordine dei programmatori C#. :O

Che cosa fa che non si possa fare con DateTime e TimeSpan?

No, no, non mi faccio tirare un'altra volta in una discussione di questo genere. :D
La mia risposta va semplicemente incontro alla richiesta di RaouL_BennetH, quando dice :
...in considerazione del fatto che in vb.net ci sono moltissime funzioni matematiche già pronte e disponibili... poi corretto in funzioni per manipolare date.
Che piaccia o no, DateAndTime fornisce molte funzioni comodissime, con buona pace degli integralisti del C#.

RaouL_BennetH
28-09-2009, 21:12
Questo è uno dei tanti "miti" da sfatare sulle differenze tra VB.NET e C#.
Io sono tra quelli ( molti ) che considerano un certo cast implicito come una gran comodità, e non un difetto. Molti invece storcono il naso. Beh, non ne hanno motivo. In realtà c'è un modo molto semplice per impedire a VB.NET di passare per buona una cosa come :
Dim a As Integer = TextBox1.Text
Basta impostare nelle opzioni di compilazione Option Strict = ON, che di default è OFF. ;)


Personalmente, non storco il naso a nulla che possa semplificarmi le cose :)


Allora alludi allo spacename DateAndTime, che comunque si può usare benissimo anche da C#, referenziando Microsoft.VisualBasic. Certo mi rendo conto che per molti C-sharpiani è un bello scorno ! :p


Idem come sopra :) Infatti ho visto che ci sono diversi metodi già pronti soprattutto in merito a operazioni matematiche sulle date. Molto comodo devo dire ;)


No, ReportViewer non l'ho mai usato. Perchè, esporti su Excel e perdi le formule ?

No, non è che perdo le formule, cioè:

L'esportazione dei dati avviene correttamente, soltanto, cercavo un modo per dire ad excel di copiarsi le stesse formule contenute nel report viewer in modo da semplificare la vita all'utente una volta esportati i dati e non costringerlo a rifarsele nelle celle di pertinenza..


Per : ||ElChE||88

Il mio problema attuale, è che sto mettendo mano ad un programma già fatto, che alle persone che lo usano va bene così com'è per molti aspetti.

Ce ne sono alcuni però che non rispondono completamente alle loro richieste e quindi, considerando che:

1) Me la cavicchio con C# ma non con VB.Net
2) Il programma suddetto è scritto in VB.Net e ci sono i sorgenti
3) Una parte del programma l'ho riscritta appunto in C# seguendo i miei criteri, con risultato appunto della Dll che poi referenzio in questo programma.

4) Sinceramente, se c'è una perfetta integrazione tra i due linguaggi, mia personalissima opinione, non vedo perchè non utilizzarla laddove possa semplificare qualcosa.

5) MA NON MENO IMPORTANTE :p ... Io NON sono un programmatore :Prrr: (anche se ce la sto mettendo tutta per diventarlo :( )

RaouL.

||ElChE||88
28-09-2009, 22:16
No, no, non mi faccio tirare un'altra volta in una discussione di questo genere. :D
...
Che piaccia o no, DateAndTime fornisce molte funzioni comodissime, con buona pace degli integralisti del C#.
Boh, ero curioso di sapere quali sono queste funzioni comodissime.
Lo sapete, vero, che con DateTime e TimeSpan si può usare operatori come - e +?

MarcoGG
29-09-2009, 08:07
No, non è che perdo le formule, cioè:

L'esportazione dei dati avviene correttamente, soltanto, cercavo un modo per dire ad excel di copiarsi le stesse formule contenute nel report viewer in modo da semplificare la vita all'utente una volta esportati i dati e non costringerlo a rifarsele nelle celle di pertinenza..


Non sono sicuro di aver capito il problema, comunque sia, se usi i Rif. COM l'inserimento di una Formula in una cella è semplice :
Dim appExcel As New Excel.Application

Dim WB As Excel.Workbook = appExcel.Workbooks.Open(percorso & nomeFile)
Dim WS As Excel.Worksheet = WB.Worksheets("Foglio1")
WS.Select()

'Scrittura di una Formula
WS.Range("C1").Formula = "=SOMMA(A1;B1)"
Mentre se usi i Rif. .NET è comunque molto simile :
Dim appExcel As New Microsoft.Office.Interop.Excel.Application

Dim WB As Microsoft.Office.Interop.Excel.Workbook = appExcel.Workbooks.Open(percorso & nomeFile)
Dim WS As Microsoft.Office.Interop.Excel.Worksheet = WB.Worksheets("Foglio1")
WS.Select()

'Scrittura di una Formula
WS.Range("C1").Formula = "=SOMMA(A1;B1)"


4) Sinceramente, se c'è una perfetta integrazione tra i due linguaggi, mia personalissima opinione, non vedo perchè non utilizzarla laddove possa semplificare qualcosa.


Già. :)

Lo sapete, vero, che con DateTime e TimeSpan si può usare operatori come - e +?

Direi proprio di sì :p :
http://www.hwupgrade.it/forum/showpost.php?p=25507783&postcount=6

RaouL_BennetH
29-09-2009, 11:30
Non sono sicuro di aver capito il problema
>cut<


E' che io l'ho spiegato molto male :muro:

Il fatto è che il report che viene generato, non ha un numero di colonne prefissato, quindi, non ho modo di assegnare formule perchè non so a monte la posizione delle celle che dovrebbero 'ospitarla' :)