3

问题

当以编程方式检查最后一个时,我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它变得异常空白。

为什么会这样?如果有更好的方法来做我正在做的事情,我们将不胜感激。

4

0 回答 0