Als Entwickler ist man schon von Natur aus neugierig und kann es kaum abwarten, die neuen Features einer neuen Version des .NET Framework kennen zu lernen. Gerade die aktuelle Version 2.0 hat hier eine ganze Menge zu bieten. Insbesondere Visual-Basic-Programmierer werden erfreut feststellen, dass sie von den Microsoft-Entwicklern nicht ganz vergessen wurden und sich bei neuen Versionen längst nicht alles um C# dreht. Ein echtes Highlight ist der My-Namespace, der exklusiv für Visual Basic 2005 zur Verfügung steht. Über diesen Namespace werden viele nützliche Funktionen angeboten, die bei .NET 1.1 noch ein wenig umständlich (und gar nicht Visual-Basic-freundlich) in den "Tiefen" der .NET-Klassenbibliothek verborgen waren oder (wie das automatische Instanziieren von Formularklassen) gar nicht zur Verfügung standen. Der My-Namespace bietet seine wirklich umfangreichen Funktionen über verschiedene Objekte an, wie Computer, Application, Forms usw. Innerhalb dieser Objekte kann über leicht verständliche Eigenschaften und Methoden auf für genau dieses Objekt bestimmte Funktionen zugegriffen werden. Ein Beispiel von vielen ist My.Computer.Keyboard, das den Zustand der Tastatur liefert. Ebenso einfach können Sie mit My.Computer.Filesystem auf Eigenschaften und Methoden zum Bearbeiten von Dateien und Laufwerken zugreifen. Die über den My-Namespace zur Verfügung gestellten Funktionalitäten werden auf verschiedene Arten gewonnen. Zum einen fasst My einfach bestehende Instanzen vorhandener und quer über die Klassenbibliothek verteilter Methoden zusammen. Zum anderen haben die Entwickler bei Microsoft einiges dazu programmiert, sodass sich Visual-Basic-Programmierer ab sofort nicht mehr um jedes Detail kümmern müssen und sich statt dessen "intuitiv", sprich per IntelliSense geleitet, an alle wichtigen Systemfunktionen herantasten.
Wie wäre es mit einem Splashscreen?
Der erste Kontakt mit dem My-Namespace ergibt sich beinahe zwangsläufig bei größeren Projekten, die mit einem Splashscreen (oder wie es in der deutschen Version von Visual Studio heißt: "Begrüßungsbildschirm") ausgestattet werden. Bei einem Blick in den von der IDE generierten Quelltext wird deutlich, dass Anwendungstitel und Versionsnummer über My-Application.Info ausgelesen werden. Auch weitere Assembly-Informationen lassen sich um einiges leichter herauslesen als es beim Framework 1.1 möglich war. Listing 1 zeigt, wie sich zum Beispiel Informationen über die eigene Assembly in Erfahrung bringen lassen. Damit überhaupt vernünftige Werte dargestellt werden, muss die Assembly mit den richtigen Informationen "gefüttert" werden. Sie erreichen dies über PROJEKT | MYFUNKTION-EIGENSCHAFTEN | ANWENDUNG | ASSEMBLYINFORMATIONEN.Listing 1My.Application stellt Informationen über die Assembly zur VerfügungtPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadListBox1.Items.Add("Assembleyname: " & My.Application.Info.AssemblyName)ListBox1.Items.Add("Copyright: " & My.Application.Info.Copyright)ListBox1.Items.Add("Produktname: " & My.Application.Info.ProductName)ListBox1.Items.Add("Version: " & My.Application.Info.Version.ToString)ListBox1.Items.Add("Directory: " & My.Application.Info.DirectoryPath)End Sub
Programmparameter abfragen
Viele Anwendungen werden mit Parametern gestartet. Besonders bei Dienstprogrammen oder Shell-Befehlen ist dies der Fall. So können Sie sich beispielsweise mit ipconfig /all detaillierte Informationen über Ihre Netzwerkkonfiguration anzeigen lassen. Diese sog. Befehlszeilenargumente können mithilfe des My-Namespace auf einfache Weise gelesen und ausgewertet werden (Listing 2).Listing 2Über My.Application werden unter anderem Befehlszeilenargumente zur Verfügung gestelltPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadIf My.Application.CommandLineArgs.Count > 0 ThenFor Each Parameter As String In My.Application.CommandLineArgsParameter = Parameter.ToUpperListBox1.Items.Add(Parameter)If Parameter = "/ALL" Then'tue etwasEnd IfNextEnd IfEnd Sub
Einfacher Zugriff auf Ressourcen
Auch beim Zugriff auf Ressourcendateien leistet Ihnen der My-Namespace gute Dienste. Dank der My.Ressource-Funktionalität können Sie mit wenigen Zeilen Code auf die im Projekt vorhanden Ressourcen zugreifen. Dabei spielt es keine Rolle, ob es sich um einen einfachen String, ein Icon, Bilder oder sonstige Dateien handelt. Fügen Sie die Ressourcen über Projekt MYFUNKTION-EIGENSCHAFTEN | RESSOURCEN hinzu. Dies können einfache Strings sein, um Meldungen für Messageboxen zentral zu verwalten, oder auch Icons, die in Toolstrips Ihren Dienst verrichten. Auch Sounddateien können als Ressourcen hinzugefügt werden, um der eigenen Applikation den gewissen "Pep" mitzugeben. Kombiniert mit der My.Computer.Audio.Play-Methode greifen Sie mit einer Zeile Quellcode auf eine Wav -Ressource zu und lassen diese wahlweise einmalig oder als Dauerberieselung im Hintergrund laufen (Listing 3). Natürlich können Sie auch auf eine als Datei vorhandene Wave-Datei zugreifen:My.Computer.Audio.Play("C:\Baby.wav", AudioPlayMode.BackgroundLoop)
Listing 3Über eine Listenauswahl in der ToolStrip werden Ressourcen ausgewähltPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadWith ListBox1.Items.Add(My.Resources.String1).Items.Add(My.Resources.String2).Items.Add(My.Resources.String2)End WithToolStripButton1.Image = My.Resources._3D_Stuff.ToBitmapMy.Computer.Audio.Play(My.Resources.Baby, AudioPlayMode.Background)End Sub
Programmeinstellungen speichern
In jeder größeren Anwendung werden Einstellungen zur Anwendung gespeichert, damit diese beim Neustart der Anwendung wieder zur Verfügung stehen. Diese Anwendungseinstellungen können auf Applikations- oder Benutzerebene gespeichert werden. Meist handelt es sich bei diesen Einstellungen um so simple Dinge wie die zuletzt benutzen Dateien oder Zugangsdaten zu einem SQL Server. Aber auch Fensterpositionen und Fenstergröße sind Werte die nach einem Neustart das arbeiten in einer gewohnten Umgebung gewährleisten. Das Anlegen solcher Einstellungsdaten kann entweder über die Ressourcen oder aber auch durch den Eigenschaftsinspektor über die Eigenschaft Applicationsetting gesetzt werden. Entscheiden Sie sich die jeweilige Einstellung "benutzerorientiert" zu sichern, so können diese Werte auch zur Laufzeit verändert werden. Bei applikationsbezogenen Einstellungen ist das nicht der Fall. Das kleine Beispiel in Listing 4 benutzt die gespeicherte Fensterposition, um das Formular nach dem Start wieder an seine letzte Position zu bringen. Die Position und Größe des Hauptfensters wird in die Variablen MainPosition und MainSize geschrieben. Die Anfangswerte können Sie in den Projekteigenschaften und dort im Register Einstellungen hinterlegen.Listing 4Nach dem Start werden Fenstergröße und Fensterposition aus den Einstellungen gelesenPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadIf My.Settings.WertBoolean = True ThenCheckBox1.Checked = TrueElse : CheckBox1.Checked = FalseEnd IfTextBox1.Text = My.Settings.WertInteger.ToStringTextBox2.Text = My.Settings.WertStringMe.Size = My.Settings.MainSizeMe.Location = My.Settings.MainPositionEnd Sub
Listing 5Programmeinstellungen lassen sich bei .NET 2.0 auch speichernPrivate Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosedIf CheckBox1.Checked ThenMy.Settings.WertBoolean = TrueElse : My.Settings.WertBoolean = FalseEnd IfMy.Settings.WertInteger = TextBox1.TextMy.Settings.WertString = TextBox2.TextMy.Settings.MainSize = Me.SizeMy.Settings.MainPosition = Me.LocationEnd Sub
Einfacher Zugriff auf das Dateisystem
Das Dateisystem wurde von Visual Basic schon immer ein wenig stiefmütterlich behandelt (dem unbekannten "Helden", der das FileSystemObject-Objekt programmiert hat, sei an dieser Stelle noch einmal gedankt). Die .NET-Klassenbibliothek enthielt in 1.1 zwar zahlreiche Klassen im Namespace System.IO, so richtig intuitiv war der Umfang mit Dateien und Verzeichnissen jedoch nicht. Dank dem My-Namespace ist das Vergangenheit. Listing 5 zeigt, wie einfach sich eine Datei in ein Verzeichnis kopieren lässt, das, sollte es nicht vorhanden sein, zuerst angelegt wird. Das Sichern von Dateien lässt sich damit schnell und automatisch verwirklichen. Mit der Methode CopyFile kann sogar der von Windows bekannte Fortschrittsdialog angezeigt werden.Listing 6Eine Datei wird nach dem Programmstart gesichertPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim Sicherungspfad As String = "C:\Sicherung" & Date.Now.ToShortDateStringDim Sicherungsdatei As String = "\Win.ini"If Not My.Computer.FileSystem.DirectoryExists(Sicherungspfad) ThenMy.Computer.FileSystem.CreateDirectory(Sicherungspfad)End IfMy.Computer.FileSystem.CopyFile("C:\WINDOWS\win.ini", Sicherungspfad + Sicherungsdatei, True)End Sub
Registry-Hacks
Selbst die gute, alte Registry lässt sich über My bequem ansprechen. Obwohl es nicht mehr gerne gesehen wird, auf diese zuzugreifen, da Sie ihre Anwendungseinstellungen bitteschön in einer plattformübergreifend lesbaren XML-Datei speichern sollten, ist es mit wenigen Zeilen möglich einen Schlüssel anzusprechen und Werte zu speichern und auch wieder auszulesen (Listing 6). Die beliebten "Tweak-Tools" für Windows XP, die praktisch ausschließlich auf "Registry-Hacks" basieren, lassen sich in Visual Basic 2005 damit so einfach wie nie zuvor umsetzen.Listing 7Ein neuer Schlüssel in der Registry wird angelegtPrivate Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadMy.Computer.Registry.CurrentUser.CreateSubKey("MyFunktion")If My.Computer.Registry.CurrentUser.GetValue("Testwert") = False ThenMy.Computer.Registry.CurrentUser.SetValue("Testwert", "Hier steht der Testtext")End IfEnd Sub
Marco Rey y Sander ist ERP-Berater in einem Hamburger Systemhaus und befasst sich unter anderem auch mit der Software-Entwicklung mobiler Endgeräte. Sie erreichen den Autor unter marco@reysander.de.






