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: MultiListBox.zip
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.
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.
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.
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.
News | Discussions | Windows Installer | Related Tools | More Help | InstallScript | About InstallSite | Shop | Site Search | |
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.