12.4.3 Klasse Dialog – Mehrfachauswahl
Die Methode OpenFile( [ Multi ] ) hat ein optionales Argument 'Multi' vom Daten-Typ 'Boolean'. Wenn das Argument 'Multi' den Wert True hat, so kann der Benutzer mehrere Dateien auswählen. Die Methode selbst gibt True zurück, wenn der Benutzer den Abbruch-Button gedrückt hat oder False, wenn der Benutzer auf den OK-Button gedrückt hat. Die Pfade der ausgewählten Dateien werden in diesem Fall in der Eigenschaft Dialog.Paths in einem String-Array gespeichert.
Im folgenden Projekt wird die Mehrfachauswahl (MultiSelect) genutzt, um mehrere Bild-Dateien aus einem Verzeichnis auszuwählen. Die ausgewählten Bilder werden dann in einem Bildbetrachter angezeigt. Eine einfache Navigation ist vorhanden.
Abbildung 12.4.3.1: Bild-Betrachter (GUI)
Mit dem Druck auf den Button 'Bilder auswählen' wird der Datei-Auswahl-Dialog gestartet und die folgende Dialog-Box geöffnet:
Abbildung 12.4.3.2: Datei-Öffnen-Dialog-Box (Multi-Select)
Anschliessend können Sie durch die Bild-Liste – im Beispiel enthält diese 5 Bilder – navigieren:
Abbildung 12.4.3.3: Bild-Betrachter
Wenn Sie die geöffnete Dialog-Box über 'Abbrechen' schliessen, so bleibt die Datei-Liste leer, da dann die Eigenschaft Dialog.Paths den Wert Null hat.
Abbildung 12.4.3.4: Dialog-Box wird abgebrochen
Es wird nur ein Quelltext-Ausschnitt dargestellt und mit ergänzenden Kommentaren versehen:
[1] Public Sub btnOpenFileImage_Click() [2] Dim sMessage1, sMessage2 As String [3] [4] SetEnabled() [5] Dialog.Title = "Wählen Sie Bild-Dateien aus (Bilder-Liste)..." [6] ' Dialog.Filter = ["*.jpg", "JPG-Bilddatei", "*.png", "PNG-Bilddatei", "*", "Alle Dateien"] [7] Dialog.Filter = ["*.png;*.jpg;*.jpeg;*.gif", "Bild-Dateien", "*", "Alle Dateien"] [8] Dialog.ShowHidden = False [9] Dialog.Path = Application.Path &/ "Images" [10] [11] ' Bilder auswählen (True -> Multiselect aktiviert) [12] If Dialog.Openfile(True) Then [13] FMain.Text = "Dialog.OpenFile(True) mit Multi-Select" [14] PictureBoxD.Picture = Picture["Symbols/intro.jpg"] [15] Return [16] Endif [17] [18] sImagePaths = New String[] ' Neue Bild-Liste [19] sImagePaths = Dialog.Paths ' Bild-Liste sichern → Navigation [20] iPictureIndex = 0 [21] [22] ' Zur Kontrolle: [23] ' For Each sPathName In Dialog.Paths [24] ' Print sPathName [25] ' Next [26] [27] PictureBoxD.Picture = Picture.Load(Dialog.Paths[0]) ' Anzeige des ersten Bildes [28] [29] sMessage1 = "Die Bild-Liste enthält genau " & Dialog.Paths.Count & " Bild" [30] sMessage2 = "Die Bild-Liste enthält " & Dialog.Paths.Count & " Bilder" [31] FMain.Text = IIf(Dialog.Paths.Count = 1, sMessage1, sMessage2) [32] [33] ' Einschalten der Bild-Navigation, wenn die Bild-Liste mehr als ein Bild enthält [34] If Dialog.Paths.Count > 1 Then [35] btnNext.Enabled = True [36] Else [37] btnNext.Enabled = False [38] Endif [39] [40] Catch [41] Message.Info(Error.Text) [42] End ' btnOpenFileImage_Click()
Kommentar:
- Der Text im Dialog-Titel – Zeile 5 – deutet schon auf die Möglichkeit hin, mehrere Bild-Dateien auswählen zu können.
- Der Filter aus Zeile 6 wurde nicht gesetzt, weil durch den 1. Teil-Filter zuerst nur Bilder mit der Extension 'jpg' angezeigt werden. Sie können aber durch die zwei Teil-Filter gezielt nach bestimmten Bildern Ausschau halten.
- Mit dem Filter in der Zeile 7 werden Ihnen sofort alle Bilder angezeigt, die auf das Muster im Filter passen.
- Die Zeile 8 ist entbehrlich – es sei denn, es handelt sich um sehr geheime Geheim-Fotos.
- Auf die Vorgabe eines bestimmten Verzeichnisses in der Zeile 9, mit dem die Dialog-Box startet, sollten Sie nicht verzichten, weil sonst als Standard-Pfad das Home-Verzeichnis des Benutzers verwendet wird oder das zuletzt benutzte Verzeichnis.
- Im Normalfall steht in der Zeile 12 die Anweisung 'If Dialog.Openfile(True) Then Return'. Wenn der Nutzer den Dialog mit 'Abbrechen' → Abbildung 12.4.3.4 abgebrochen hat, dann wird die Prozedur sofort verlassen. Im Beispiel dagegen wird vor dem Verlassen der Fenstertitel geändert und das Startbild gesetzt.
- Wenn der Benutzer mindestens ein Bild ausgewählt hat, dann wird in der Zeile 18 ein neues String-Array erzeugt. Um die Bildliste zu speichern – sie wird für die Navigation durch die Bild-Anzeige benötigt – wird dem String-Array sImagePaths eine Kopie der Dialog-Bild-Liste zugewiesen.
- In den Zeilen 22 bis 25 können Sie zur Kontrolle bei der Erprobung durch die Bild-Liste iterieren und sich die einzelnen Datei-Pfade anzeigen lassen.
- Da mindestens ein Bild ausgewählt wurde, wird das erste Bild über die Anweisung in der Zeile 27 sofort angezeigt.
- Um dem (formalen) Satz 'Die Bild-Liste enthält 1 Bilder' zu entgehen, werden in den Zeilen 29 und 30 zwei Mitteilungen erzeugt, so dass korrekte Sätze – in Abhängigkeit von der Anzahl der Bilder – angezeigt werden.
- Präventiv verwenden Sie die Gambas-Instruktion CATCH, um Fehler abzufangen und anzuzeigen.
Den kompletten Quelltext finden Sie im Download-Bereich im Projekt-Archiv.




