Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
1 Einführung
2 Grundlagen der Sprachsyntax
3 Klassendesign
4 Weitere Datentypen
5 Multithreading
6 Collections und LINQ
7 Eingabe und Ausgabe
8 Anwendungen: Struktur und Installation
9 Code erstellen und debuggen
10 Einige Basisklassen
11 Windows-Anwendungen erstellen
12 Die wichtigsten Steuerelemente
13 Tastatur- und Mausereignisse
14 MDI-Anwendungen
15 Grafiken mit GDI+
16 Drucken
17 Entwickeln von Steuerelementen
18 Programmiertechniken
19 WPF – Grundlagen
20 Layoutcontainer
21 WPF-Steuerelemente
22 Konzepte von WPF
23 Datenbankverbindung mit ADO.NET
24 Datenbankabfragen mit ADO.NET
25 DataAdapter
26 Offline mit DataSet
27 Datenbanken aktualisieren
28 Stark typisierte DataSets
A Anhang: Einige Übersichten
Stichwort

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual Basic 2008 von Andreas Kuehnel, Stephan Leibbrandt
Das umfassende Handbuch
Buch: Visual Basic 2008

Visual Basic 2008
3., aktualisierte und erweiterte Auflage, geb., mit DVD
1.323 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1171-0
Pfeil 12 Die wichtigsten Steuerelemente
Pfeil 12.1 Gemeinsamkeiten
Pfeil 12.1.1 Größe und Position
Pfeil 12.1.2 Sichtbarkeit und Aktivierungszustand
Pfeil 12.1.3 Beschriftung
Pfeil 12.1.4 Farben
Pfeil 12.1.5 Grafische Darstellung
Pfeil 12.1.6 Zugriffsrechte
Pfeil 12.1.7 Zusatzinformationen speichern
Pfeil 12.1.8 Position bei Größenänderung der Form
Pfeil 12.1.9 Die Größe mit der Form skalieren
Pfeil 12.1.10 Kindelemente
Pfeil 12.1.11 Steuerelemente fokussieren
Pfeil 12.1.12 Maus- und Tastaturereignisse
Pfeil 12.2 Schaltflächen (Button)
Pfeil 12.2.1 Rahmendarstellung
Pfeil 12.2.2 Beschriftung und Grafiken
Pfeil 12.3 Auswahlkästchen (CheckBox)
Pfeil 12.3.1 Eigenschaften
Pfeil 12.3.2 Drei Zustände
Pfeil 12.4 Gruppierung (GroupBox)
Pfeil 12.5 Optionsschaltflächen (RadioButton)
Pfeil 12.5.1 Gruppierung
Pfeil 12.5.2 Eigenschaften
Pfeil 12.5.3 Zustandswechsel programmieren
Pfeil 12.6 Texteingabefelder (TextBox)
Pfeil 12.6.1 Einzeilige Eingabefelder
Pfeil 12.6.2 Mehrzeilige Eingabefelder
Pfeil 12.7 Beschriftungen (Label)
Pfeil 12.8 Popuptextfenster (ToolTip)
Pfeil 12.8.1 Definition von Hinweistexten
Pfeil 12.8.2 Anzeigedauer der Texte
Pfeil 12.8.3 Weitere Eigenschaften
Pfeil 12.9 Auswahllisten (ListBox)
Pfeil 12.9.1 Daten einer ListBox
Pfeil 12.9.2 Darstellung einer Listbox
Pfeil 12.9.3 Einfach- und Mehrfachauswahl
Pfeil 12.9.4 Listboxen mit Einfachauswahl
Pfeil 12.9.5 Listboxen mit Mehrfachauswahl
Pfeil 12.9.6 Benutzerdefinierte Sortierung
Pfeil 12.9.7 Auswahlliste mit Datenquelle (DataSource)
Pfeil 12.10 Markierte Auswahllisten (CheckedListBox)
Pfeil 12.11 Kombinationslistenfelder (ComboBox)
Pfeil 12.11.1 Ereignisse
Pfeil 12.11.2 Autovervollständigung
Pfeil 12.12 Standarddialoge
Pfeil 12.12.1 Datei zum Öffnen wählen (OpenFileDialog)
Pfeil 12.12.2 Datei zum Speichern wählen (SaveFileDialog)
Pfeil 12.12.3 Ordner selektieren (FolderBrowserDialog)
Pfeil 12.12.4 Farbe bekennen (ColorDialog)
Pfeil 12.12.5 Schriftart wählen (FontDialog)
Pfeil 12.13 Menüs, Symbol- und Statusleisten
Pfeil 12.13.1 Menüsammlung (ToolStripContainer)
Pfeil 12.13.2 Menüdefinition
Pfeil 12.13.3 Eigenschaften von Menüs
Pfeil 12.13.4 Kontextmenüs
Pfeil 12.13.5 Symbolleisten
Pfeil 12.13.6 Statusleisten
Pfeil 12.14 Bildlaufleisten (HScrollBar und VScrollBar)
Pfeil 12.15 Fortschrittsbalken (ProgressBar)
Pfeil 12.16 Animationen (Timer)
Pfeil 12.17 Container (Panel)
Pfeil 12.18 Registerkarten (TabControl)
Pfeil 12.19 Baumansichten (TreeView und TreeNode)
Pfeil 12.19.1 Knotenpunkte definieren
Pfeil 12.19.2 Eigenschaften
Pfeil 12.19.3 Ereignisse
Pfeil 12.19.4 Knotenexpansion und -reduktion
Pfeil 12.19.5 Knoten (TreeNode)
Pfeil 12.20 Teiler (Splitter und SplitContainer)
Pfeil 12.20.1 Splitter
Pfeil 12.20.2 SplitContainer
Pfeil 12.21 Listenansicht (ListView)
Pfeil 12.21.1 Beteiligte Klassen
Pfeil 12.21.2 Eigenschaften und Ereignisse
Pfeil 12.21.3 Listenelemente (ListViewItem)
Pfeil 12.21.4 Unterelemente in Spalten (ListViewSubItem)
Pfeil 12.21.5 Spaltenüberschriften (ColumnHeader)
Pfeil 12.21.6 Listenelemente Gruppen zuordnen
Pfeil 12.21.7 Sortierung der Spalten
Pfeil 12.21.8 Listenelemente ändern
Pfeil 12.21.9 Dateiexplorer-Beispiel


Rheinwerk Computing - Zum Seitenanfang

12.12 Standarddialoge Zur nächsten ÜberschriftZur vorigen Überschrift

Bei Standarddialogen handelt es sich um Dialoge (Forms), die wir in nahezu jeder Windows-Anwendung vorfinden. Insgesamt fünf werden uns in der Toolbox als Steuerelemente angeboten, die – weil sie nicht direkt mit dem Benutzer interagieren – im Komponentenfach unterhalb des Windows Forms-Designers abgelegt werden:

  • ColorDialog
  • OpenFileDialog
  • FolderBrowserDialog
  • SaveFileDialog
  • FontDialog

Bis auf OpenFileDialog und SaveFileDialog sind alle direkt von der abstrakten Basisklasse CommonDialog abgeleitet. Die beiden Dateidialoge schalten noch die abstrakte Klasse FileDialog dazwischen.

Die wichtigste Methode aller Standarddialoge ist ShowDialog. Sie dient zum Öffnen eines Dialogfensters, zum Beispiel:

openFileDialog.ShowDialog()

Diese Methode liefert einen Rückgabewert vom Typ DialogResult.


Rheinwerk Computing - Zum Seitenanfang

12.12.1 Datei zum Öffnen wählen (OpenFileDialog) Zur nächsten ÜberschriftZur vorigen Überschrift

OpenFileDialog ist ein Dialogfenster, in dem der Anwender zur Laufzeit eine Datei auswählen kann, die er öffnen möchte. Die Klasse hat nur einen parameterlosen Konstruktor.

Dim dlgFileOpen As New OpenFileDialog() 
dlgFileOpen.ShowDialog()

Die beiden Anweisungen bewirken das Öffnen des Dialogfensters aus Abbildung 12.19. Es unterstützt die Navigation zu der Datei, die geöffnet werden soll. Wenn Sie auf die Schaltfläche klicken, wird die ausgewählte Datei nicht tatsächlich geöffnet, sondern nur in der Eigenschaft FileName des Dialogs gespeichert.

Abbildung 12.19 Der Standarddialog »OpenFileDialog«

In den folgenden Unterabschnitten zeige ich Ihnen, wie sowohl das Layout als auch das Verhalten eines OpenFileDialog-Fensters in Grenzen an spezifische Forderungen angepasst wird.

Beschriftung der Titelleiste

Standardmäßig wird in der Titelleiste des Dialogs die Beschriftung Öffnen angezeigt. Sie können den Titel mit der Eigenschaft Title beliebig festlegen.

Dim dlgFileOpen As New OpenFileDialog() 
dlgFileOpen.Titel = "Öffnen eines Projektordners"

Standardverzeichnis

Der Dialog zum Öffnen einer Datei zeigt beim ersten Mal den Inhalt des Ordners, in dem sich die ausführbare Datei befindet. Beim nächsten Öffnen ist es immer das Verzeichnis, aus dem heraus zuvor eine Datei ausgewählt worden ist. Alternativ wird vor dem Öffnen des Dialogs in der Eigenschaft InitialDirectory das anzuzeigende Verzeichnis spezifiziert. Wenn Sie keinen Wert festlegen, enthält die Eigenschaft einen Leerstring.

dlgFileOpen.InitialDirectory = "C:\MyProjects"

Möglicherweise benötigen Sie aber eine Pfadangabe zu einem systemspezifischen Verzeichnis. Um die notwendigen Informationen über die Umgebung der aktuellen Maschine zu erhalten, können Sie auf die Dienste der Klasse Environment der .NET-Klassenbibliothek zurückgreifen.

Systemspezifische Verzeichnisse geben Sie indirekt an. Die Klasse Environment im Namensraum System definiert Eigenschaften und Methoden, die zum Abrufen von maschinenspezifischen Informationen nützlich sind, beispielsweise die statische Methode GetFolderPath, die den Pfad eines bestimmten Systemordners abruft. Sie erwartet als Argument einen Wert der Enumeration Environment.SpecialFolder. Die Tabelle 12.10 zeigt nur einen Auszug der Enumeration; einen vollständigen Überblick gibt die .NET-Dokumentation.


Tabelle 12.10 Die Enumeration »Environment.SpecialFolder« (Auszug, Benutzereinstellungen=C:\Dokumente und Einstellungen\ <User>)

Member Rückgabewert (Standardinstallationsvorgabe)

CommonProgramFiles

C:\Programme\Gemeinsame Dateien

History

<Benutzereinstellungen>\Lokale Einstellungen\Verlauf

Personal

<Benutzereinstellungen>\Eigene Dateien

ProgramFiles

C:\Programme

Programs

<Benutzereinstellungen>\Startmenü\Programme

Recent

<Benutzereinstellungen>\Recent

StartMenu

<Benutzereinstellungen>\Startmenü

Startup

<Benutzereinstellungen>\Startmenü\Programme\Autostart

System

C:\WINDOWS\System32



Hinweis
Unter Vista sind einige der Verzeichnisse in Wirklichkeit Links.


Möchten Sie das zu öffnende Standardverzeichnis auf den Ordner

C:\Dokumente und Einstellungen\<User>\Eigene Dateien

festlegen, lautet die Anweisung:

dlgFileOpen.InitialDirectory = _ 
   Environment.GetFolderPath(Environment.SpecialFolder.Personal)

Dateifilter setzen

Die Eigenschaft Filter des OpenFileDialog-Steuerelements legt die Dateitypen fest, die dem Anwender aus dem angezeigten Ordner zum Öffnen angeboten werden, zum Beispiel:

dlgFileOpen.Filter = "Textdateien (*.txt)|*.txt"

Nach welchen Dateitypen gefiltert wird, kann der Anwender durch eine entsprechende Auswahl in einem Kombinationslistenfeld unterhalb des Anzeigebereichs bestimmen.

3Die durch die Eigenschaft Filter beschriebene Zeichenfolge unterliegt einem strengen Muster. Die Anweisung oben definiert einen Dateifilter, der im Auswahlbereich des Dialogs nur Textdateien mit der Dateierweiterung .txt anbietet. Die Zeichenfolge zur Festlegung eines Filters setzt sich immer aus zwei Teilen zusammen, die durch einen senkrechten Strich voneinander getrennt werden. Die Teilzeichenfolge links vom Strich wird dem Benutzer im Kombinationslistenfeld Dateityp angezeigt, die rechts vom Strich stehende Teilzeichenfolge gibt an, nach welchen Kriterien die Dateien gefiltert werden sollen. Das »*«-Zeichen dient als Platzhalter.

Soll das Kombinationslistenfeld mehrere Auswahloptionen anbieten, ergänzen Sie die Zeichenfolge der Filter-Eigenschaft nach dem bekannten Muster um die gewünschten Filter. Zur Abgrenzung untereinander verwenden Sie ebenfalls einen senkrechten Strich.

Im folgenden Beispiel wird das Kombinationslistenfeld mit zwei Einträgen gefüllt: Der erste ist die Filterung nach Textdateien, und die zweite Auswahloption zeigt sämtliche Dateien des geöffneten Ordners an.

dlgFileOpen.Filter = "Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*"

Wird zur Laufzeit der Anwendung die erste Auswahl getroffen, werden die TXT-Dateien herausgefiltert; entscheidet sich der Anwender für die zweite, werden alle Dateien, unabhängig von der Dateierweiterung, angezeigt.

Die im Kombinationslistenfeld angebotene Liste kann durchaus sehr lang werden, wenn Sie den Anwender mit vielen Filteroptionen verwöhnen wollen.

dlgFileOpen.Filter = _ 
    "Textdateien (*.txt)|*.txt| HTML-Dateien|*.htm;*.html|" _ 
    & "Bitmap-Dateien (*.bmp)|*.bmp|" _ 
    & "Ausführbare Dateien (*.exe)|*.exe|" _ 
    & "Word-Dokumente(*.doc)|*.doc|" _ 
    & "Alle Dateien (*.*)|*.*)"

Manchmal möchte man auch mehrere Dateitypen gleichzeitig anzeigen lassen. Das ist beispielsweise dann der Fall, wenn Sie nach mehreren Bildformaten filtern wollen. Listen Sie dazu in der rechten Teilzeichenfolge alle gewünschten Dateiformate auf. Diese müssen durch ein Semikolon voneinander getrennt werden:

dlgFileOpen.Filter = "Alle Bilddateien|*.bmp;*.jpeg;*.gif"

Anwendungsspezifischer Standardfilter

Normalerweise wird nach dem Öffnen des Dialogs der zuerst aufgeführte Filter im Kombinationslistenfeld angezeigt. Mit der Eigenschaft FilterIndex kann aber auch ein beliebiger aus der Liste gewählt werden:

dlgFileOpen.FilterIndex = 1

Entgegen den sonst üblichen Gepflogenheiten beginnt die Indizierung der Filter nicht mit dem Index 0, sondern mit dem Index 1. Soll nach dem Öffnen des Dialogs beispielsweise nach den im angezeigten Verzeichnis befindlichen Word-Dokumenten gefiltert werden (siehe das Codefragment oben), muss der Eigenschaft FilterIndex die Zahl 4 übergeben werden.

Die ausgewählte Datei

Das Ziel des Dialogs ist, eine Datei auszuwählen und die Wahl im weiteren Programmcode zum tatsächlichen Öffnen der Datei zu verwenden. Die Eigenschaft FileName liefert uns den Dateinamen einschließlich der gesamten Pfadangabe. Ihn können wir als Übergabeargument bei der Instanziierung einer Klasse aus dem Namensraum System.IO mit einem Konstruktor benutzen, der einen path-Parameter entgegennimmt. Zum Beispiel:

Dim dlgFileOpen As New OpenFileDialog() 
if dlgFileOpen.ShowDialog() = DialogResult.OK Then 
  Dim sr As StreamReader = New StreamReader(dlgFileOpen.FileName) 
...

Mehrfachauswahl von Dateien

Möchten Sie eine Mehrfachauswahl von Dateien zulassen, müssen Sie die Eigenschaft MultiSelect des Dialogs auf True setzen. Das Verhalten bei der Dateiauswahl entspricht dann dem eines Listenfeldes mit erweiterter Mehrfachauswahl.

Bei einer einfachen Auswahlmöglichkeit kann man den Pfad zu der zu öffnenden Datei über die Eigenschaft FileName abfragen. Bei der Mehrfachauswahl gibt FileNames ein Array vom Typ String zurück:


Public ReadOnly Property FileNames As String()

Im Gegensatz zu FileName ist diese Eigenschaft schreibgeschützt.

Ereignisse von OpenFileDialog

Nur zwei spezifische Ereignisse zeichnen das Dialogfeld aus. Zum einen können Sie in Verbindung mit dem Klicken auf die Schaltfläche OK einen Ereignishandler mit dem Ereignis FileOK verknüpfen. Anstatt die Rückgabe des Aufrufs der Methode ShowDialog auszuwerten, können Sie somit auch im Ereignishandler auf die Dateiauswahl im Dialog reagieren. Unter bestimmten Umständen ist das Auswerten des Ereignisses FileOk flexibler, denn der Ereignishandler hat ein Argument vom Typ CancelEventArgs, das uns erlaubt, über die Eigenschaft Cancel das Schließen des Dialogs zu verhindern. Dadurch wird es dem Anwender möglich, mehrere Dateien einzeln hintereinander auszuwählen, ohne dass der Dialog wiederholt geöffnet werden muss.

Das Ereignis HelpRequest setzt voraus, dass die Eigenschaft ShowHelp=True gesetzt ist und im Dialog eine Hilfe-Schaltfläche angezeigt wird. Ausgelöst wird dieses Ereignis durch Klicken auf diese Schaltfläche.

Das Beispiel »Texteditor«

Im folgenden Beispiel wollen wir einen einfachen Texteditor entwickeln und für die allgemeinen Operationen zum Öffnen und Speichern Standarddialoge benutzen. Zunächst soll nur das Öffnen von Dateien implementiert werden. Später wird das Beispiel auch um die Speicherung der Dokumentinformationen ergänzt.

Die Form des Texteditors in Abbildung 12.20 enthält eine Textbox, die auch dann den gesamten Clientbereich der Form ausfüllt, wenn die Form zur Laufzeit vergrößert oder verkleinert wird. Am einfachsten ist das zu realisieren, wenn die Eigenschaft Dock der Textbox auf DockStyle.Fill eingestellt wird. Das Formular enthält ein Menü mit dem Hauptmenüpunkt Datei und den Menüunterelementen Öffnen, Neu, Speichern, Speichern unter und Beenden.

Abbildung 12.20 Formular des Beispiels »Texteditor«

Mit dem Erstellen eines Menüs werden wir uns später beschäftigen. Im Moment ist es für Sie nur wichtig zu wissen, dass ein Menüelement das Ereignis Click bereitstellt, das ausgelöst wird, sobald der Anwender einen Menüpunkt auswählt.


'...\WinControls\Dialoge\Texteditor.vb

Public Class Texteditor

  Private Function Weiter() As Boolean 
    Dim fortfahren As Boolean = True 
    If Textfenster.Modified Then 
      Dim erg As DialogResult = MessageBox.Show( _ 
        "Wollen Sie den geänderten Text speichern?", _ 
        Application.ProductName, MessageBoxButtons.YesNoCancel, _ 
        MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) 
      If erg = DialogResult.Yes Then 
        fortfahren = Speichern() 
      ElseIf erg = DialogResult.Abort OrElse erg = DialogResult.Cancel Then 
        fortfahren = False 
      End If 
    End If 
    Return fortfahren 
  End Function

  Private Sub Neu_Click(ByVal sender As Object, ByVal e As EventArgs) _ 
  Handles NeuMenüpunkt.Click 
    If Weiter() Then 
      Datei = "" 
      Textfenster.Text = "" 
      Text = "Unbenannt – Texteditor" 
    End If 
  End Sub

  Private Sub Öffnen_Click(ByVal sender As Object, ByVal e As EventArgs) _ 
  Handles ÖffnenMenüpunkt.Click 
    If Weiter() Then 
      Dim ofd As New OpenFileDialog() 
      ofd.Filter = "Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*" 
      ofd.Title = "Öffnen einer Textdatei" 
      If ofd.ShowDialog() = DialogResult.OK Then 
        Dim sr As IO.StreamReader = Nothing 
        Try 
          sr = New IO.StreamReader(ofd.FileName) 
          Textfenster.Text = sr.ReadToEnd() 
          Text = ofd.FileName 
          Datei = ofd.FileName 
        Catch ex As Exception 
          MessageBox.Show(ex.Message, "Texteditor") 
        Finally 
          Try 
            If sr IsNot Nothing Then sr.Close() 
          Catch ex As Exception 
            MessageBox.Show(ex.Message, "Texteditor") 
          End Try 
        End Try 
      End If 
    End If 
  End Sub

  Private Sub Beenden_Click(ByVal sender As Object, ByVal e As EventArgs) _ 
  Handles BeendenMenüpunkt.Click 
    If Weiter() Then Application.Exit() 
  End Sub

  Private Sub Schließen(sender As Object, e As FormClosingEventArgs) _ 
  Handles MyBase.FormClosing 
    e.Cancel = Not Weiter() 
  End Sub

  ...

End Class

Im Zusammenhang mit dem Thema dieses Abschnitts ist der wichtigste Codeabschnitt der Dialog zum Öffnen einer Textdatei:

Dim ofd As New OpenFileDialog() 
... 
If ofd.ShowDialog() = DialogResult.OK Then 
...

Wie alle modalen Dialogfenster liefert der Aufruf der Methode ShowDialog einen Rückgabewert vom Typ DialogResult. Wir müssen nur noch feststellen, welche Schaltfläche der Anwender im Dialog geklickt hat, denn nur mit der Bestätigung durch OK soll die markierte Datei auch geöffnet und im Textfenster angezeigt werden.

Eine Textdatei kann mit mehreren Klassen des Namensraums System.IO realisiert werden. Im Beispiel wird die Klasse StreamReader eingesetzt und dem Konstruktor die Eigenschaft FileName des Dialogs zugewiesen. Die Methode ReadToEnd() liest Eingaben von der aktuellen Position des Dateizeigers bis zum Ende der Datei ein und berücksichtigt dabei auch Zeilenumbrüche innerhalb des Textes. Der eingelesene Dateiinhalt wird in der Textbox angezeigt.

sr = New IO.StreamReader(ofd.FileName) 
Textfenster.Text = sr.ReadToEnd() 
... 
Finally 
... 
If sr IsNot Nothing Then sr.Close()

Da insbesondere Dateioperationen schnell einen Fehler verursachen können, wird das Öffnen und Einlesen in einen Try-Anweisungsblock eingeschlossen. Sollte eine Ausnahme auftreten, wird die Fehlermeldung in einem Meldungsfenster angezeigt. Das Schließen des StreamReader-Objekts erfolgt im Finally-Zweig, damit es auch geschlossen wird, wenn während des Lesens eine Ausnahme ausgelöst wird. Damit eine Ausnahme während des Schließens die Anwendung nicht beendet, wird Close() innerhalb eines Try-Blocks aufgerufen.

Die Methode Weiter() speichert, wenn gewünscht, den Text in einer Datei und liefert als Rückgabewert die Information, ob der Vorgang abgeschlossen wurde (gegebenenfalls auch, ohne zu speichern). Eine Speicherung ist nur erforderlich, wenn der Text geändert wurde. Dies wird durch die Eigenschaft Modified der Textbox kenntlich gemacht, die bei Zuweisung der Eigenschaft Text der Textbox automatisch auf False gesetzt wird. Auf die Implementierung der Methode Speichern() gehe ich im nächsten Abschnitt ein.

Da bei jeder Textänderung eine Prüfung auf Speicherung erfolgen sollte, wird Weiter() sowohl vor dem Öffnen einer Datei als auch vor dem Löschen des Textes durch den Menüpunkt Neu aufgerufen. Analog wird vor dem Schließen des Fensters und vor dem Ende des Programms dem Benutzer durch Aufruf von Weiter() die Möglichkeit zum Speichern gegeben. Alle Aufrufe sind so platziert, dass die Bearbeitung nur dann fortgesetzt wird, wenn keine Änderungen vorliegen oder der Benutzer sich eindeutig für die Fortsetzung entscheidet. Somit fehlt nur noch die Implementierung der Speicherroutine.


Rheinwerk Computing - Zum Seitenanfang

12.12.2 Datei zum Speichern wählen (SaveFileDialog) Zur nächsten ÜberschriftZur vorigen Überschrift

Die Klasse SaveFileDialog stellt ein Dialogfenster dar, das den Anwender zum Speichern einer Datei auffordert. Da die beiden Klassen SaveFileDialog und OpenFileDialog die gemeinsame Basisklasse FileDialog haben, ähneln sich beide Dialoge nicht nur optisch, sondern weisen auch viele gemeinsame Eigenschaften auf, beispielsweise Title, InitialDirectory und Filter. Verschaffen wir uns daher in Tabelle 12.11 einen Überblick über die Eigenschaften, durch die sich die beiden Klassen unterscheiden.


Tabelle 12.11 Spezifische Eigenschaften der Klasse »SaveFileDialog«

Eigenschaft Beschreibung

AddExtension

Gibt an, ob einem Dateinamen im Dialogfeld automatisch eine Erweiterung hinzugefügt wird, wenn der Benutzer keine Erweiterung angibt.

DefaultExt

Die Standarddateinamenerweiterung

CreatePrompt

Gibt an, ob die Neuanlage einer nicht existierenden Datei in einem Meldungsfenster durch den Benutzer bestätigt werden muss.

OverwritePrompt

Gibt an, ob das Überschreiben einer vorhandenen Datei in einem Meldungsfenster durch den Benutzer bestätigt werden muss.


Viele Anwendungen ermöglichen es einem Benutzer, auch ohne die Angabe einer Dateierweiterung eine Datei zu speichern. Eine passende Dateierweiterung wird dann automatisch angehängt. MS Word erweitert den Dateinamen beispielsweise um die Erweiterung .doc, der Text-editor Notepad um .txt. Wollen Sie diese Unterstützung auch in Ihrer eigenen Anwendung realisieren, setzt das zunächst voraus, dass die Eigenschaft AddExtension=True gesetzt wird. Der Eigenschaft DefaultExt teilen Sie die gewünschte Standarddateinamenerweiterung mit.

Die Zeichenkette der Eigenschaft DefaultExt wird ohne den Punkt angegeben, der Dateiname und die Dateierweiterung voneinander trennt. Der Punkt wird automatisch eingefügt. Haben Sie eine anwendungsspezifische Dateierweiterung festgelegt und gibt der Anwender die Dateierweiterung trotzdem an, erkennt der Dialog das und hängt keine zweite an.

saveFileDialog1.AddExtension = True 
saveFileDialog1.DefaultExt = "vb"

Die beiden Eigenschaften CreatePrompt und OverwritePrompt informieren den Anwender mit einem Meldungsfenster. Ist CreatePrompt=True und gibt der Anwender einen Dateinamen an, der im aktuell geöffneten Verzeichnis des Dialogs noch nicht vorhanden ist, wird im Meldungsfenster um Bestätigung gebeten, ob die Datei neu erstellt werden soll.

Übernehmen Sie den Standardwert True der Eigenschaft OverwritePrompt, wird ein Meldungsfenster angezeigt, mit dem der Anwender bestätigen kann, ob eine vorhandene Datei gleichen Namens überschrieben werden soll.

Der Speichern-Dialog im Beispiel »Texteditor«

Das Beispiel Texteditor des vorigen Abschnitts soll jetzt um eine Speicherfunktionalität erweitert werden. Das Feld Datei speichert den Namen der Datei oder "", wenn noch kein Name gewählt wurde. Die Methode Speichern() ruft den Ereignishandler des Menüpunkts zum Speichern auf. Fortfahren ist nur False, wenn der Benutzer in einem Dialog Cancel angeklickt hat oder eine Ausnahme aufgetreten ist.


'...\WinControls\Dialoge\Texteditor.vb

Public Class Texteditor 
... 
  Private Datei As String = ""

  Private Fortfahren As Boolean 
  Private Function Speichern() As Boolean 
    Fortfahren = True 
    Speichern_Click(Nothing, Nothing) 
    Return Fortfahren 
  End Function

  Private Sub Speichern_Click(ByVal sender As Object, ByVal e As EventArgs) _ 
  Handles SpeichernMenüpunkt.Click 
    If Datei.Equals("") Then 
      SpeichernUnter_Click(Nothing, Nothing) 
    Else 
      Dim sw As IO.StreamWriter = Nothing 
      Try 
        sw = New IO.StreamWriter(Datei, False) 
        sw.Write(Textfenster.Text) 
        Textfenster.Modified = False 
      Catch ex As Exception 
        Fortfahren = False 
        MessageBox.Show(ex.Message, "Texteditor") 
      Finally 
        Try 
          If sw IsNot Nothing Then sw.Close() 
        Catch ex As Exception 
          MessageBox.Show(ex.Message, "Texteditor") 
        End Try 
      End Try 
    End If 
  End Sub

  Private Sub SpeichernUnter_Click(sender As Object, e As EventArgs) _ 
  Handles SpeichernUnterMenüpunkt.Click 
    Dim sfd As New SaveFileDialog() 
    sfd.Filter = "Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*" 
    sfd.Title = "Speichern einer Textdatei" 
    If Not Datei.Equals("") Then sfd.FileName = Datei 
    If sfd.ShowDialog() = DialogResult.OK Then 
      Datei = sfd.FileName 
      Speichern_Click(Nothing, Nothing) 
      Text = IO.Path.GetFileName(Datei) & " – Texteditor" 
    Else 
      Fortfahren = False 
    End If 
  End Sub

End Class

Sowohl das Speichern unter bekanntem Namen als auch unter einem neuen Namen findet in dem Ereignishandler Speichern_Click() des Menüpunkts Speichern statt. Ist noch kein Dateiname spezifiziert, ruft die Methode ihrerseits SpeichernUnter_Click() auf, um einen Namen festzulegen, die Datei innerhalb von Speichern_Click() zu speichern und die Titelleiste der Anwendung anzupassen. Im Zusammenhang mit dem Thema dieses Abschnitts ist der wichtigste Codeabschnitt der Dialog zum Speichern einer Textdatei:

Dim sfd As New SaveFileDialog() 
... 
If sfd.ShowDialog() = DialogResult.OK Then 
  Datei = sfd.FileName 
...

Die Anweisungen ermitteln einen Dateinamen, der im Feld Datei gespeichert wird. Die Zuweisung an die Eigenschaft FileName vor dem Öffnen des Dialogs dient nur dazu, im Textfeld für den Dateinamen bereits etwas stehen zu haben. Der eigentliche Speichervorgang im Ereignishandler Speichern_Click() ist analog zu dem des Öffnens aufgebaut:

sw = New IO.StreamWriter(Datei, False) 
sw.Write(Textfenster.Text) 
... 
Finally 
... 
If sw IsNot Nothing Then sw.Close()

Der Strom wird geöffnet und der Text mit Write() hineingeschrieben. Der zweite Parameter des Konstruktors sorgt dafür, dass der Text die Datei gegebenenfalls überschreibt und nicht an sie angehängt wird. Auch hier findet das Schließen in einem Finally-Zweig statt, um den Strom auch bei Auftreten einer Ausnahme zu schließen. Um die Anwendung nicht vorzeitig durch eine Ausnahme während des Schließens zu beenden, wird das Schließen in einem eigenen Try-Block ausgeführt.


Rheinwerk Computing - Zum Seitenanfang

12.12.3 Ordner selektieren (FolderBrowserDialog) Zur nächsten ÜberschriftZur vorigen Überschrift

Mit OpenFileDialog können Sie eine bestimmte Datei auswählen. Das Steuerelement bietet jedoch keine Möglichkeit, die Wahl auf einen Ordner zu beschränken. Dafür stellt das .NET Framework ein anderes Steuerelement zur Verfügung: FolderBrowserDialog. Etwas enttäuschend ist das in Abbildung 12.21 gezeigte Layout des Dialogs. Während uns in anderen Anwendungen ein Dialog ähnlich dem des Dialogs zum Öffnen einer Datei angeboten wird (unter anderem auch von Visual Studio), präsentiert sich die Oberfläche eines FolderBrowserDialog-Objekts nach dem Aufruf der Methode ShowDialog ziemlich spartanisch.

Abbildung 12.21 Der Standarddialog »FolderBrowserDialog«

Die Einflussnahme auf die Anzeige des Dialogs ist auch nur sehr begrenzt. Oberhalb des Anzeigebereichs können Sie einen Text ausgeben. Die entsprechende Zeichenfolge weisen Sie der Eigenschaft Description zu.

Standardmäßig kann ein Anwender aus allen lokalen oder sich im Netzwerk befindlichen Ordnern auswählen. Mit der Eigenschaft RootFolder kann ein anderer Ordner zum Stammordner des Dialogs gemacht werden.

Falls Sie es dem Benutzer nicht erlauben wollen, einen neuen Ordner mit der Schaltfläche Neuer Ordner anzulegen, müssen Sie die Schaltfläche ausblenden. Dazu dient die Eigenschaft ShowNewFolderButton, die Sie dann auf False setzen müssen. Die Pfadangabe des ausgewählten Ordners kann nach dem Schließen des Dialogs mit der Eigenschaft SelectedPath ausgewertet werden, die vom Typ String ist.


Rheinwerk Computing - Zum Seitenanfang

12.12.4 Farbe bekennen (ColorDialog) Zur nächsten ÜberschriftZur vorigen Überschrift

Noch einfacher als OpenFileDialog und SaveFileDialog ist das Dialogfenster zu programmieren, das dem Anwender ermöglicht, interaktiv Farben auszuwählen, beispielsweise um der Eigenschaft BackColor oder ForeColor zur Laufzeit eine neue Farbe zuzuweisen.

Zum Öffnen des Dialogs wird ebenfalls die Methode ShowDialog aufgerufen. Danach sieht das Standarddialogfeld zur Farbauswahl wie in Abbildung 12.22 aus.

Abbildung 12.22 Der Standarddialog »ColorDialog«

Ein Klick auf die Schaltfläche Farben definieren erweitert das Fenster und ermöglicht es dem Anwender, über die vordefinierten Farben hinaus nach eigener Vorstellung Farbwerte festzulegen. Beabsichtigen Sie, dem Anwender von Anfang an das erweiterte Dialogfenster anzubieten, müssen Sie vor dem Öffnen des Dialogs die Eigenschaft FullOpen=True setzen.

Die ausgewählte Farbe wird in der Eigenschaft Color des Dialogs gespeichert.

Im folgenden Codefragment wird die Hintergrundfarbe der Form gemäß der Auswahl im Dialog verändert. Dem Benutzer wird der erweiterte Dialog angezeigt. Wir werten allerdings nur die OK-Schaltfläche des Dialogs aus, da die Abbrechen-Schaltfläche bedeutungslos ist:

Private Sub btnSetColor_Click(sender As Object, e As EventArgs) 
  colorDialog1.FullOpen = True 
  If colorDialog1.ShowDialog() = DialogResult.OK Then _ 
    Me.BackColor = colorDialog1.Color 
End Sub

Im Zustand FullOpen hat der Anwender die Möglichkeit, 16 benutzerdefinierte Farben festzulegen, die beim erneuten Öffnen des Dialogs zur Auswahl stehen können. Allerdings ist die Wiedergabe bereits festgelegter benutzerdefinierter Farben kein Standardverhalten, sondern benötigt zusätzlichen Programmcode. Verantwortlich für das Speichern benutzerdefinierter Farben ist die Eigenschaft CustomColors.

Damit die vom Anwender ausgewählten Farben zur Laufzeit zur Verfügung stehen, müssen wir zuerst ein Integer-Array mit ausreichender Kapazität deklarieren:

Dim myColors(15) As Integer

Bevor mit ShowDialog das Dialogfenster geöffnet wird, weisen wir den Inhalt dieses Arrays der Eigenschaft CustomColors zu:

colorDialog1.CustomColors = myColors

Nach dem Schließen des Dialogs werden die Farben im Array gespeichert und stehen bei einem späteren erneuten Öffnen des Dialogs zur Verfügung:

myColors = colorDialog1.CustomColors

Fassen wir zum Abschluss den Code in einem Click-Ereignishandler zusammen:

Public Partial Class Form1 : Inherits Form 
  Private myColors(15) As Integer 
  ... 
  Private Sub btnSetColor_Click(sender As Object, e As EventArgs) 
    fontDialog1.FullOpen = True 
    if colorDialog1.ShowDialog() = DialogResult.OK Then _ 
      Me.BackColor = colorDialog1.Color 
    myColors = colorDialog1.CustomColors 
  End Sub 
End Class

Rheinwerk Computing - Zum Seitenanfang

12.12.5 Schriftart wählen (FontDialog) topZur vorigen Überschrift

Der nächste Vertreter in der Runde der Standarddialoge ist FontDialog. Dieser Dialog ermöglicht die Auswahl einer Schriftart und des Schriftstils. Sie weisen Ihre Auswahl der Font-Eigenschaft zu, indem Sie auf OK klicken.

Das Erscheinungsbild des Dialogs kann durch vier Eigenschaften manipuliert werden, die in Tabelle 12.12 aufgeführt sind.


Tabelle 12.12 Eigenschaften zur Darstellung des Dialogs »FontDialog«

Eigenschaft Beschreibung

ShowApply

Gibt an, ob der Dialog eine Übernehmen-Schaltfläche hat.

ShowColor

Gibt an, ob der Dialogfeld eine Farbauswahl ermöglicht.

ShowEffects

Gibt an, ob Unterstrichen oder Durchgestrichen ausgewählt werden können.

ShowHelp

Gibt an, ob der Dialog eine Hilfe-Schaltfläche anzeigt.


Die Schrift in einer Komponente wird durch die Eigenschaften Color und Font festgelegt, die im FontDialog-Objekt gespeichert sind. Die Farbe, die im FontDialog-Objekt eingestellt wird, ist die Schriftfarbe einer Komponente, die durch die Eigenschaft ForeColor beschrieben wird. Die Eigenschaft Font beschreibt die Schrift inklusive ihres Schnitts (fett, kursiv usw.).

Mit MinSize und MaxSize lässt sich festlegen, innerhalb welcher Spanne die Schriftgröße ausgewählt werden kann. MaxSize muss größer MinSize sein, und beide Werte müssen größer als 0 sein. Geben Sie den Wert »0« ein, entspricht das der Standardeinstellung. Haben beide Eigenschaften denselben Wert, ist dieser als konstanter Wert der Schriftgröße anzusehen, die der Benutzer nicht ändern kann.

Eine weitere Eigenschaft ist FixedPitchOnly vom Typ Boolean. Hat die Eigenschaft den Wert True, werden im Dialog nur Schriftarten mit fester Zeichenbreite angeboten. Ein typisches Beispiel dafür ist der Schrifttyp Courier.



Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Visual Basic 2008
Visual Basic 2008
Jetzt Buch bestellen


 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Rheinwerk-Shop: Visual Basic 2012






 Visual Basic 2012


Zum Rheinwerk-Shop: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Rheinwerk-Shop: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Rheinwerk-Shop: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Rheinwerk-Shop: Windows Presentation Foundation






 Windows Presentation
 Foundation


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern