![]() |
TCheckListBox.items.checked[n] alle auf einmal setzen?
Hi@all.
Ich habe einen TTabControl. Jedes darin befindliche Tab soll andere Einträge in einer TCheckListBox anzeigen. Der Nutzer kann per Mausklick den die Haken bei den Einträgen der TCheckListBox entfernen oder setzen. Beim Wechsel zwischen Tabs müssen alle TCheckListBox.items.checked[n] für die entsprechenden Einträge wiederhergestellt werden. Für jedes Tab habe ich ein boolsches Array, in welchem gespeichert ist, welcke Einträge "checked" sind und welche "unchecked" sind. Wie kann ich nun der TCheckListBox diese Information "schnell" übergeben? Seriell mit folgendem Code dauert dies eine halbe Ewigkeit, da nach jeder Änderung der Checked Property neu gezeichnet wird und die Variante halte ich für sehr unschön:
Delphi-Quellcode:
Aber ich habe weder im Forum, noch in der Delphi Hilfe eine Möglichkeit gefunden, den "checked-state" mehrer Einträge parallel zu setzen.
for n:=0 to length(CheckedMask)-1 do
CheckListBox.checked[n]:=CheckedMask[n]; Hat jemand eine Idee? Besten Gruß und vielen lieben Dank! //edit: Tippfehler im Delphi-Quelltext behoben, danke an KodeZwerg, s. Beitrag nr. 6 und 7. |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Ich habe es gerade mal ausprobiert und stelle keine Neuzeichnungen fest.
Ich hab 50 Einträge in eine CheckListbox abgelegt und so den Checked-Wert verändert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i : Integer; begin for i := 0 to CheckListBox1.Items.Count-1 do begin CheckListBox1.Checked[i] := not CheckListBox1.Checked[i]; end; end; |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Hallo,
bezügl. Performance: hilft hier evtl. ein
Delphi-Quellcode:
try
CheckListBox.Items.BeginUpdate; for n := 0 to length(CheckedMask) - 1 do CheckListBox.Checked[n] := CheckedMask[n]; finally CheckListBox.Items.EndUpdate; end; |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Für "CheckListBox.Checked[X] := True/False" Variante braucht man kein Begin/EndUpdate da Einträge nicht verändert werden, nur die Box, oder irre ich mich?
|
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Zitat:
Bisher habe ich herausgefunden, dass TListView die gleichen Funktionalität bereitstellen kann, aber hierbei eher noch langsamer arbeitet... Sehr komisch... |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Zitat:
Dein Aufruf über items[].checked löst ein Neuzeichnen aus, bin ich fast fest von überzeugt. |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Zitat:
Oder reden wir hier nicht über VCL? |
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das ist so schon mal besser, ich könnte mir aber vorstellen, dass es bei Fällen mit mehr als 150 Einträgen immer noch ein ähnliches Problem geben könnte. Aber vermutlich gibts hier keine bessere Möglichkeit, als alle Checkboxen einzeln zu setzen. Zitat:
|
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
Zitat:
|
AW: TCheckListBox.items.checked[n] alle auf einmal setzen?
[Edit]Quarks[/Edit]
Ich habe mal in dein Projekt geschaut, eine schnellere Variante kenne ich auch nicht. Wenn es Dir um Zeitersparniss in vielen CheckListBoxen geht, würd ich für jede eine CheckListBox nutzen, somit entfällt der Zeitraubende Faktor beim neu befüllen. Ich hatte Anfangs gedacht das CheckListBoxen pro Tab die gleichen sind, nur halt anders markiert/gecheckt werden sollen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz