Hallo,
in Peter Kahrels
ScriptUI for dummies (scriptui-1-12.pdf auf S. 35) findet sich ein hübsches Schnippsel zum fortlaufenden Filtern von Einträgen in einer Liste.
Mit dem Austausch der Zeile "
if (array[i].toLowerCase().indexOf (temp) == 0)" gegen
if (array[i].toLowerCase().match(temp) != null ) lässt sich der Filter auch auf 'Innenbereiche' der Listenbegriffe ausdehnen.
Nun arbeite ich mit einer Palette statt mit einem Dialog und benötige die Filterung der Liste über eine längere Zeit. Dabei stelle ich fest, dass mit der Zahl der Einträge in der Liste die Aktualisierungszeit gefühlt wie exponential ansteigt.
Zwar habe ich schon von
onChanging auf
onChange gewechselt, damit nicht fortlaufend, sondern erst nach Eigabe von Enter gefiltert wird. Aber bei Listen mit 150 und mehr Einträgen dauert das dann immer noch lange.
Interessanterweise ist nicht – wie ursprünglich vermutet – der Neuaufbau der Liste die Bremse, sondern das Löschen(!) der Listeneinträge mit dem simplen Befehl
removeAll().
Momentan behelfe ich mir mit einem kompletten Neuaufbau der Palette (Sichern der Werte, Schließen der Palette und Neuzeichnen unter Verwendung der gesicherten Werte. Das geht deutlich schneller als das Löschen der Listeneinträge. Aber man sieht eben die Palette zwischen dem Schließen und dem Neuzeichnen blinken.
Weiß jemand einen Weg, wie man alternativ die Liste selbst (statt nur aller Listeneinträge) löschen könnte, um sie hinterher mit
add() wieder neu aufzubauen?