我使用一个简单的过程来更新listview项目(DynamicAppearance),但是有问题。 我需要在运行时显示(检查)/不显示列表视图项(TAccessoryObjectAppearance,AccessoryType:Checkmark),具体取决于提供的值。 它应该是:
但我明白了:
在设计时我将项目设置为"不可见"。
以下代码不起作用:
procedure UpdateList(lv: TListView);
var
Litem: TListViewItem;
iName: TListItemText;
iCheck: TListItemAccessory;
begin
FDQuery.Open('SELECT Name, Value FROM tbl_values');
lv.Items.Clear;
lv.BeginUpdate;
while not FDQuery.Eof do
begin
Litem := lv.Items.Add;
iName := Litem.Objects.FindObjectT<TListItemText>('Name');
iName.Text := FDQuery.FieldValues['Name'];
iCheck := LItem.Objects.FindObjectT<TListItemAccessory>('Check');
if FDQuery.FieldValues['Value'] > 0 then
iCheck.Visible:= True
else
iCheck.Visible := False;
FDQuery.Next;
end;
lv.EndUpdate;
end;
此过程在form.show事件上运行。
但后来我运行了另一个更改数据库表中某些值的过程,并再次运行相同的过程(UpdateList)来更新listview项值。现在Checkmarks正确显示:
我做错了什么?
Delphi 10.2.1
答案 0 :(得分:0)
这就是我所做的:
while not FDQuery.Eof do
begin
Litem := lv.Items.Add;
**ListView1.ApplyStyleLookup;** //Add this line
iName := Litem.Objects.FindObjectT<TListItemText>('Name');
iName.Text := FDQuery.FieldValues['Name'];
iCheck := LItem.Objects.FindObjectT<TListItemAccessory>('Check');
if FDQuery.FieldValues['Value'] > 0 then
iCheck.Visible:= True
else
iCheck.Visible := False;
FDQuery.Next;
end;