domenica 13 gennaio 2008

Mono, Windows.Forms e VB.NET

Oggi avevo un pò di tempo libero a disposizione e mi sono dedicato alla versione made in novell di .net, invece di testare i classici esempi in C#, ho deciso di verificare lo stato del compilatore VB.NET e delle Windows.Forms (infatti mono sarà veramente utile quando farà funzionare senza problemi applicazioni complete non esempi costruiti ad hoc).
Al momento ho testato il tutto sul mio MacBook (Leopard 10.5.1, mono 1.2.6) utilizzando come editor smultron, (prometto di testare il tutto su debian in settimana).
Vari helliniword testuali hanno funzionato senza problemi quindi ho provato qualcosa di grafico:
--- Test_VB_Form.vb --
' Spazio dei nomi utilizzati

imports System.Windows.Forms
imports System.Drawing

' Spazio dei nomi MyHeloApp come contenitore per la nostra applicazione
Namespace MyHelloApp

Public Class MainWindow
Inherits Form
' dichiariamo due variabili di istanza, due controlli una textbox e un bottone
' dichiariamo bottone con la parola chiave withEvents che permette di gestirne
' gli eventi.
Public name As TextBox = New TextBox()
Public btnBottone As Button = new Button()

Public Sub New
' Proprietà generali, altezza, larghezza, caption e disposizione sullo schermo
Me.Text = "HelloMyName VB mono"
Me.Width = 300
Me.Height = 300
CenterToScreen()
' Inseriamo una textBox
name.Text=""
name.Size = New Size(150,20)
name.Location = New Point(10,10)
Me.Controls.Add(name)
' Inseriamo il bottone
btnBottone.Text = "cliccami..."
btnBottone.Size = New Size(90,30)
btnBottone.Location = New Point(10,40)
Me.Controls.Add(btnBottone)
' Colleghiamo gli oggetti ai loro gestori di evento
AddHandler Application.ApplicationExit, AddressOf MainWindow_OnExit
AddHandler btnBottone.Click, AddressOf btnBottone_Clicked
End Sub

' Gestiamo il click sul bottone
Public Sub btnBottone_Clicked(ByVal sender As Object, ByVal args As EventArgs) 'Handles btnBottone.Click
Dim stringa As String = String.Format("Hello, {0}", name.Text)
MessageBox.Show(stringa)
End Sub

Public Sub MainWindow_OnExit(ByVal sender As Object, ByVal args As EventArgs)
MessageBox.Show("Uscita...")
End Sub
End Class

Public Module Program
Sub Main()
Application.Run(New MainWindow())
End Sub
End Module

End Namespace

-- End File --
Compilare con: vbnc Test_VB_Form.vb
il risultato è stato abbastanza buono:
inoltre nelle future versioni Windows.Forms su OSX sarà implementato in maniera nativa mentre per il momento gira sotto X11, ma questo è il minore dei mali al momento.
Ho quindi optato per provare qualcosa più complesso una semplice forms che utilizza controlli più avanzati come lo slider, il calendario i tabs e i nuovi layout di .NET 2.0:
La form fa parte dello stage alpha di un minigestionale che avevo scritto per g&g snc quache annetto fa.
La forms funziona ma... Ma se si fa un qualsiasi resize della finestra X11 spara fuori un sacco di errori e il programma viene freezato, in settimana cercherò di verificare se su linux da gli stessi problemi (infatti non è la prima volta che sotto leopard x11 mi tira strani scherzi).
Conclusione? Il progetto mono sta venendo su bene, e se a livello etico i puristi si sdegnano di avere .net sul proprio sistema operativo c'è da dire che avere la possibilità di sfruttare il software .net sula propria macchina è una comodità incredibile :), inoltre per chi sviluppa con prodotti microsoft si aprono nuove prospettive multipiattaforma.
In realtà mono è ancora lontano da .net già un software come paint.net non gira :(
Inoltre microsoft sviluppa .net a ritmo frenetico e si corre il rischio di avere un mono 2.0 funzionale con tutti gli assembly di net 2.0 e 3.5 e magari microsoft è già al lavoro su .net 5.0... Comunque il progetto senza dubbio merita di essere seguito.
Alternative? per i programmatori C++ wxwidgets, QT. (e le gtk? nulla! finchè non si ha una versione nativa osx)... per i programmatori visual basic: RealBasic e KBasic (tutta roba commerciale ma stiamo guardando al multipiattaforma quindi per ora niente gambas), per i programmatori C#... bè sicuramente java... :) :)

3 commenti:

Anonimo ha detto...

Beh il fatto che microsoft rilasci continue versioni (1.0, 1.1, 2.0, 3.0, 3.5 ecc...) non significa affatto che ci lavora a ritmo frenetico. Il core è sempre quello il resto...solo fumo negli occhi, come ha sempre fatto con i sistemi operativi.
Pertanto, mono è più che maturo (infatti già supporta la versione .net 3.5 quasi al completo).
Saluti

Matteo ha detto...

Perchè ritieni che WPF, WCF, WF, Entity Framework, Linq, Extensions Method, Lambda Expressions bla bla bla siano solo fumo negli occhi?
Ritieni che vista, dopo aver letto questo http://blogs.ugidotnet.org/raffaele/archive/2008/11/27/94770.aspx , sia solo fumo negli occhi?

thefoxii ha detto...

Dove posso trovare la documentazione di VB Net per mono?