Shop

InstallShield
Advanced Installer
AdminStudio
more / weitere

InstallShield und AdminStudio Schulungen

weitere Infos

Verwenden einer doppelten ListBox als Ersatz für eine ListBox mit Mehrfachauswahl

Abstract: Mit den Benutzerinterface-Tabellen von Windows Installer ist es nicht möglich, eine ListBox zu erstellen, in der mehrere Einträge gleichzeitig ausgewählt werden können. Dieser Artikel beschreibt eine alternative Lösung, bei der zwei Listboxen nebeneinander dagestellt werden, eine für "verfügbare" Einträge und eine für "ausgewählte" Einträge. Zwischen den beiden Listen befinden sich Schaltflächen, mit denen Einträge von einer Liste in die andere verschoben werden können. Der Artikel zeigt auch, wie man Einträge zu MSI-Tabellen dynamisch mit benutzerdefinierten Aktionen hinzufügen kann (um Zeilen in die ListBox Tabelle einzufügen oder zu entfernen), und wie man die Dialog-Anzeige mit Hilfe des "Zwillings-Dialog-Tricks" aktualisieren kann (was erforderlich ist um die Listboxen auf dem Bildschirm zu aktualisieren nachdem Einträge hinzugefügt oder entfernt wurden).

ENGLISCH: English version of this article

Download für diesen Artikel: ZIP MultiListBox.zip

So sieht es aus

Wenn Sie das Beispiel-Setup, das in der ZIP-Datei enthalten ist, ausführen, sehen Sie diesen Dialog:

Es gibt zwei Listen mit Einträgen (im Beispiel Eiscreme-Sorten). Ein Klick auf die Schaltfläche Hinzufügen>> verschiebt den markierten Eintrag von der linken in die rechte Liste. Die Schaltfläche << Entfernen verschiebt entsprechend einen Eintrag von rechts nach links. Beachten Sie, dass die Buttons nur aktiviert sind, wenn in der entsprechenden Liste ein Eintrag markiert wurde.

So funktioniert es

In der MSI-Datei gibt es einen Dialog mit Namen IceCremeA. Das ist der Dialog mit den zwei Listboxen. Es gibt noch einen gleichartigen Dialog IceCremeB. Die beiden Dialog sehen identisch aus. Durch Klick auf die Schaltflächen Hinzufügen oder Entfernen wird zwischen den beiden Dialogen jeweils hin- und hergesprungen. Dies ist erforderlich um die Listboxen zu aktualisieren. Dieser "Zwillingsdialog"-Trick ist die einzige Möglichkeit, damit Windows Installer die ListBox Tabelle neu einliest.

In der MSI-Datei befindet sich auch eine benutzerdefinierte Tabelle IceCremeList. Sie ist nach dem gleichen Schema aufgebaut wie die ListBox Tabelle. Dort sind die verfügbaren Einträge für die Listboxen gespeichert, die in der MSI-Datei zunächst leer angelegt sind. Aus dieser Tabelle werden die Einträge zur Laufzeit in die ListBox Tabelle eingetragen. Tabelleneinträge die bereits in der MSI-Datei enthalten sind, lassen sich nicht zuverlässig durch benutzerdefinierte Aktionen ändern. Deshalb wurden die Einträge zunächst in einer separaten Tabelle abgelegt und werden erst zur Laufzeit in die ListBox Tabelle kopiert.

Es werden drei benutzerdefinierte Aktionen benötigt (VBScript das in der Binary Tabelle gespeichert ist, Quelltext befindet sich ebenfalls in der ZIP-Datei):

Beachten Sie dass die Spalte Property in der ListBox Table angibt, in welcher Liste ein Eintrag angezeigt wird.

Schlußbemerkung

Dies ist Beispiel-Code. Sie sollten Fehlerüberprüfungen hinzufügen und ihn gründlich testen. Im allgemeinen ist für benutzerdefinierte Aktionen eine DLL besser als VBScript. Es wäre daher besser, für den Produktiveinsatz das Beispiel nach C zu portieren. Auf jeden Fall: Verwendung auf eigene Gefahr.

Über den Autor

Stefan Krüger arbeitet als freiberuflicher Setup-Berater und betreibt die Webseite InstallSite.de, auf der Setup-Entwickler Ressourcen und Informationen untereinander austauschen. Stefan wurde von Microsoft als MVP (Most Valuable Professional) für Windows Installer ausgezeichnet.

 

  

English News Discussions Windows Installer Related Tools More Help InstallScript About InstallSite Shop Site Search
deutsch Neuigkeiten Diskussionsgruppen Windows Installer MSI FAQ Artikel     Shop Suche

Copyright © by InstallSite Stefan Krueger. All rights reserved. Legal information.
Impressum/Imprint Datenschutzerklärung/Privacy Policy
By using this site you agree to the license agreement. Webmaster contact.