问题
当以编程方式检查最后一个时,我TListBox
的变得空白。为了更好地说明它,在此我所说的空白是什么意思:TListBoxItem
语境
我正在从TJSONArray
. 每个项目看起来像{"event_code","event_name"}
。
然后,我比较 event_code 是否写在第二个TJSONArray
:上json_response_available_events
。如果是这样,ListBoxItem
将进行检查。
代码
procedure TFormHome.TimerGetEventsTimer(Sender: TObject);
var
K : Integer;
Z : Integer;
ListCount : Integer;
AvailableList_Count: Integer;
lb_item: TListBoxItem;
event_code_first_array: string;
event_code : string;
event_name : string;
begin
// Disable this timer for now
TimerGetEvents.Enabled := false;
// Get List of Notifications
json_response_events := DM_Auth0.ServerMethods1Client.GetEventsCodeAndDescription(communication_token);
json_response_available_events := DM_Auth0.ServerMethods1Client.GetAllowedNotificationsList(communication_token, genset_id);
ListCount := json_response_events.Count -1;
AvailableList_Count := json_response_available_events.Count - 1;
for K := 0 to (ListCount) do
begin
// Get complete Event Code and Name
event_name := json_response_events.Items[K].toString;
// Get Event Code
event_code_first_array := StringReplace(event_name.Split([':'])[0], '"', '', [rfReplaceAll]);
// Get Event Name
event_name := StringReplace(event_name.Split([':'])[1], '"', '', [rfReplaceAll]);
// Create ListBoxItem
lb_item := TListBoxItem.Create(self);
lb_item.Parent := lb_notifications;
lb_item.Text := event_name;
lb_item.StyleLookup := 'listboxitemleftdetail';
// Check if this Item code is available
for Z := 0 to (AvailableList_Count) do
begin
if json_response_available_events.Items[Z] <> nil then
begin
// Get Event Code
event_code := json_response_available_events.Items[Z].toString;
// Format
event_code := StringReplace(event_code, '"', '', [rfReplaceAll]);
if event_code_first_array.Contains(event_code) then
begin
if K <= ListCount then
begin
lb_item.IsChecked := true;
lb_item.IsSelected := false;
end;
end;
end;
end;
end;
end;
分析
如果我们设置为<
only,它会正确显示列表,但最后一项将保持未选中状态。
if K < ListCount then
begin
lb_item.IsChecked := true;
lb_item.IsSelected := false;
end;
我什至可以更改它的=
属性
if K = ListCount then
begin
lb_item.Text := 'Deadpool for President';
end;
并且lb_item.isChecked := false
工作正常,但是在设置时lb_item.isChecked := true
它变得异常空白。
为什么会这样?如果有更好的方法来做我正在做的事情,我们将不胜感激。