![]() |
TListView CheckBoxen verschwinden
Ich benutze diese Prozedur um Items in einer ListView nach oben und nach unten zu verschieben. Die Eigenschaft Checkboxes ist auf True. Mein Problem ist, wenn ich ein Item mit Häckchen verschiebe ist alles in ordnung, verschiebe ich aber ein Item ohne Häkchen auf ein Item mit Häckchen verschwinden alle anderen Häckchen auser das Häckchen von dem soeben verschobenen Item.
Habe ein kleines Beispielprojekt erstellt, dass mein Problem vielleicht etwas einfacher darstellt: ![]()
Delphi-Quellcode:
[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]
procedure MoveItems(AListView: TListView; Up: Boolean = True);
var OldItem, NewItem: TListItem; AIndex: Integer; begin Assert(Assigned(AListView)); with AListView do begin Items.BeginUpdate; try OldItem := TListItem.Create(Items); try OldItem.Assign(Selected); if Up then AIndex := Selected.Index - 1 else AIndex := Selected.Index + 1; if not AIndex in [0..Items.Count - 1] then Exit; Selected.Delete; NewItem := Items.Insert(AIndex); NewItem.Assign(OldItem); Selected := NewItem; finally OldItem.Free; end; finally Items.EndUpdate; end; end; end; |
Lösung gefunden
Hab mir dieses Assign mal angeschaut und rausgefunden dass es an folgender Anweisung liegt:
Code:
Hab zwar bis jetzt noch net gerafft wie und wieso des net geht, aber ich hab die prozedur ein bisschen modifiziert und so funkt es jetzt.
OldItem.Checked := Selected.Checked;
Delphi-Quellcode:
{*********************************************************}
{ Einzelne ListView Items nach oben und unten verschieben } {*********************************************************} procedure MoveItems(AListView: TListView; Up: Boolean = True); var OldItem, NewItem: TListItem; AIndex: Integer; ItemChecked: boolean; begin Assert(Assigned(AListView)); with AListView do begin Items.BeginUpdate; try OldItem := TListItem.Create(Items); try OldItem.Caption := Selected.Caption; OldItem.Data := Selected.Data; OldItem.ImageIndex := Selected.ImageIndex; OldItem.Indent := Selected.Indent; OldItem.OverlayIndex := Selected.OverlayIndex; OldItem.StateIndex := Selected.StateIndex; OldItem.SubItems := Selected.SubItems; if Selected.Checked then ItemChecked := true else ItemChecked := false; if Up then AIndex := Selected.Index - 1 else AIndex := Selected.Index + 1; if not AIndex in [0..Items.Count - 1] then Exit; Selected.Delete; NewItem := Items.Insert(AIndex); NewItem.Assign(OldItem); NewItem.Checked := ItemChecked; Selected := NewItem; finally OldItem.Free; end; finally Items.EndUpdate; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 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