VB.NET - Il Namescape My
Una delle novità più interessanti di Visual Basic 2005 è il Namespace My che introduce un modo rapido per l'accesso ad importanti classi relative al computer su cui l'applicazione è in esecuzione, all'utente, all'applicazione stessa, ai form dell'applicazione e a eventuali webservice associati.
È importante notare che My è un esclusiva del linguaggio Visual Basic .NET 2005, infatti non esiste niente di simile in C# e non si deve, quindi, far confusione con il this che invece è equivalente a Me di Visual basic.
Inoltre, il namespace non è semplicemente una scorciatoia alle classi del .net framework ma va ben oltre questo visto che comunque ci sono funzioni che non sono presenti nel framework.
Ecco una rappresentazione, sintetica, del namespace My:
My.Application
L’oggetto My.Application rende disponibili informazioni sull’applicazione Windows Form o Console come il percorso, le CultureInfo, la versione e la modalità di autenticazione dell’utente. Le proprietà di My.Application sono:
ApplicationContext | Restituisce l’oggetto ApplicationContext utilizzatoper l’applicazione Windows Form corrente. |
CommandLineArgs | Restituisce una collection (ReadOnly) che contiene gli argomenti della riga di comando. |
Culture | Restituisce l’oggetto CultureInfo attualmente in uso. |
Deployment | Restituisce l’oggetto ApplicationDeployment di ClickOnce che permette l’aggiornamento da programma dell’applicazione attuale. |
Info | Restituisce un oggetto AssemblyInfo dove sono disponibile informazioni come versione, titolo, descrizione e altre. |
IsNetworkDeployed | Restituisce un boolean che indica se l’applicazione è stata installando ClickOnce. |
Log | L’oggetto Log rende disponibili proprietà e metodi per la scrittura di informazioni su eventi e eccezioni nel log dell’applicazione |
UICulture | Restituisce il CultureInfo che il thread corrente utilizza per il recupero di risorse specifiche della cultura. |
MinimumSpashScreenDiplayTime | Determina il tempo minimo di visualizzazione dellp splash screen (naturalmente disponibile solo per applicazioni Windows Forms) |
OpenForms | Collection contenente i forms aperti. |
SaveMySettingsOnExit | Determina se all’uscita, l’applicazione, salva tutte le impostazioni dell’utente. |
SplashScreen | Determina il form utilizzato per lo splash screen. |
Se vogliamo, ad esempio, scrivere qualcosa nel log delle applicazioni scriveremo, semplicemente:
My.Application.Log.WriteEntry("testo inserito nel log")
Oppure scrivere maggiori dettagli:
My.Application.Log.WriteEntry("message", TraceEventType.Information, 1)
Naturalmente, per poter utilizzare il listener EventLog occorre decommentare le seguenti righe nel file App.Config:
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
Oltre alle property elencate in precedenza, My.Application espone anche metodi ed eventi:
ChangeCulture(string) | Metodo che imposta la cultura utilizzata. |
ChangeUICulture(string) | Metodo che imposta la cultura utilizzata dal thread corrente per recuperare risorse specifiche alla cultura. |
GetEnvironmentVariable(varname) | Restituisce il valore di una variabile d’ambiente. |
DoEvents | Processa tutti i messaggi Windows in coda. |
OnCreateSplashScreen | Evento eseguite quando l’applicazione crea lo splash screen. |
ShutDown | Scatenato alla chiusura dell’applicazione. |
StartUp | Scatenato all’avvio dell’applicazione. |
StartUpNextInstance | Evento sollevato all’avvio di un’ulteriore istanza. |
UnhandledException | Si scatena quando si verifica un’eccezione non gestita. |
NetworkAvailabilityChanged | Si scatena quando l’applicazione ottiene o perde la disponibilità di una connessione di rete. |
My.Computer
L’oggetto My.Computer è sicuramente l’oggetto più ricco del Namespace My, infatti, tutte le proprietà restituiscono oggetti figli che contengono molte informazioni del computer.
Vista la vastità di My.Computer, tratteremo in maniera molto sintetica i vari oggetti che ne fanno parte.
Iniziamo da My.Computer.Audio che permette l’esecuzione di un suono in maniera sincrona o asincrona in modo da, ad esempio, far eseguire un suono durante il normale svolgimento dell’applicazione.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("c:\mysound.wav", AudioPlayMode.BackgroundLoop)
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
My.Computer.Audio.Stop()
End Sub
Altro oggetto è My.Computer.Clipboard che contiene scorciatoie a System.Windows.Forms.Clipboard che permette l’accesso agli “appunti” di sistema.
' Memorizza una stringa negli appunti
My.Computer.Clipboard.SetText("testo da copiare negli appunti")
' Restituisce il testo contenuto negli appunti
Dim clip As String = My.Computer.Clipboard.GetText
Naturalmente l’oggetto contiene metodi specifici per ogni tipo di dato contenuto (immagini, testo, audio o elenco file) e in più un metodo generico SetData utilizzabile per tipi diversi da quelli elencati in precedenza. Ecco un esempio di utilizzo di SetData:
<Serializable()> _
Public Class Person
Public Name As String
Public Age As Integer
End Class
Dim p As New Person
With p
.Name = "Vito Arconzo"
.Age = 26
End With
My.Computer.Clipboard.SetData("Person", p)
Da notare che la classe, per poter essere copiata nella clipboard, deve avere obbligatoriamente l'attributo Serializable.
Passiamo adesso all’oggetto My.Computer.FileSystem che contiene tutti i metodi già disponibili in System.IO.Directory, System.IO.File e System.IO.Path con alcune “chicche” in più come il metodo FindInFiles che permette la ricerca di una file all’interno di una directory o di un albero di cartelle, oppure, altra feature, la possibilità che hanno alcuni metodi di visualizzare una finestra standard durante qualsiasi operazione sui files.
Altri oggetti di My.Computer di sola lettura che contengono informazioni varie sul sistema sono Info,Keyboard, Mouse, Ports e Screen.
Info | Permette di accedere ad informazioni riguardanti la macchina locale, tra vui nome del sistema, sistema operativo, memoria e assembly caricati. |
Keyboard | Permette di determinare lo stato della tastiera e dei vari tasti come CTRL, SHIFT, ALT o se BLOC NUM e BLOC SCROLL sono attivati. |
Mouse | Contiene informazioni varie sul mouse collegato (numero di tasti, se dotato di rotella, etc...). |
Name | Nome della macchina su cui gira l’applicazione. |
Network | Fornisce informazioni sull’indirizzo IP della macchina, lo stato della connessione e, inoltre, consente l’esecuzione di un PING. |
Ports | |
Printer | |
Registry | |
Screen | Permette l’accesso alle informazioni dei monitor collegati e alle rispettive proprietà come BitsPerPixel, WorkingArea e via dicendo. |
| |
Esempio di esecuzione di un PING:
If My.Computer.Network.Ping("192.168.0.1") Then
MessageBox.Show("Ping effettuato con successo!")
Else MessageBox.Show("Ping NON effettuato con successo!")
End If
Altro oggetto molto utile per lo sviluppo di applicazione Windows Forms è My.Computer.Registry che, comunque, contiene scorciatoie a Microsoft.Win32.Registry e permette quindi, operazioni di lettura e scrittura sul registro di Windows. Attenzione!!! Operazioni sul registro sono sempre molto pericolose e dannose se non sappiamo benissimo cosa stiamo facendo. Occorre, quindi, prestare molta attenzione a quello che si fa.
My.User
L’oggetto My.User, utilizzabile anche per applicazioni ASP.NET, permette la verifica dell’identità dell’utente attualmente autenticato.
If My.User.IsAuthenticated Then
MessageBox.Show("L'utente autenticato è: " + My.User.Name)
End If
My.Resource
Passiamo adesso all’oggetto My.Resource che permette operazioni sulle risorse dell’applicazioni ossia informazioni incluse nell’assembly che possono essere file di testo, immagini o qualsiasi altro file che altrimenti verrebbero forniti come file esterni. Diventa molto semplice, ad esempio, accedere ad un file icona aggiunta come risorsa, dalla nostra applicazione:
Me.Icon = My.Resources.DefaultIcon
Naturalmente, DefaultIcon è il nome dell’icona aggiunta alle risorse dell’applicazione ed è, quindi, Visual Studio che automaticamente popola l’oggetto My.Resource con tutte le risorse aggiunte.
My.Settings
Per l’accesso al file di configurazione dell’applicazione, il Namespace My, mette a disposizione l’oggetto My.Settings. Infatti Visual Studio genera “al volo” il codice della classe My.Settings in modo da avere supporto con l’intellisense per le impostazioni aggiunte nel file app.config.
Mettiamo il caso di avere il file di configurazione:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="NamespaceMy.My.MySettings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
</configuration>
Bene, potremo utilizzare direttamente :
Dim n As Integer = My.Settings.MaxRows
Molto comodo. Oltre a vari metodi e proprietà per operazioni sulle impostazioni dell’applicazione, l’oggetto My.Settings espone anche alcuni eventi che vengono sollevate, ad esempio, quando viene modificata un’impostazione.
My.Forms
Per concludere l’oggetto My.Forms che restituisce l’istanza del oggetto forms predefinito dell’applicazione:
My.Forms.Form1.Show()
Molto comodo in casi i cui dobbiamo accedere da altri form secondari a quello principale, senza doverci gestire una variabile Public con il riferimento al form principale.
Conclusioni
In questo articolo abbiamo visto, seppur in maniera molto sintetica, le classe e le funzionalità disponibili con il Namespace My. L’utilizzo di My può, in molte situazioni, accellerare lo sviluppo di applicazioni con il .NET framework facendo comunque attenzione al fatto che My è un’esclusiva del linguaggio Visual Basic e, quindi, in situazione di porting verso altri linguaggi come C#, possono esserci problemi.
Approfondimenti
Visual Basic Developer Center: My Namespace
Visual Basic: Simplify Common Tasks by Customizing the My Namespace ...