【问题标题】:TShellListView LazarusTShellListView 拉撒路
【发布时间】:2018-12-30 14:53:24
【问题描述】:

是否可以将 ShellListView 中的项目设置为visible=false?我想过像ShelLlistView.Items.visible(false) 这样的东西,但它不存在,我不知道其他解决方案,所以我希望有人能帮我解决这个问题。

我还不能为你发布任何代码,因为我还没有任何 ShellListView,但我希望你能给我一些建议,它是如何工作的。

【问题讨论】:

    标签: lazarus freepascal


    【解决方案1】:

    Afaik,这是不可能的,因为 TShellListView 中显示的 ListItems 没有 Visible 属性。但是,根据 PeterBelow (TeamB) 的说法,您可以通过销毁一个项目来有效地“隐藏”它。见http://www.delphigroups.info/2/67/290279.html

    当然,如果您希望“取消隐藏”以这种方式隐藏的项目,则需要创建并添加一个具有相同 Caption 等的新节点。

    这段代码使用标准的 Lazarus TShellListView 对我来说很好用:

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Item : TListItem;
    begin
      Item := ShellListView1.Items[0];
      Caption := Item.Caption;
      Item.Free;
    end;
    

    并删除列表中的第一项。

    以下内容删除ShellListView 中的所有项目。 downto 是为了说明Count 值在循环的每次迭代中都会减小。

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i : Integer;
    begin
      for i := ShellListView1.Items.Count - 1 downto 0 do
        ShellListView1.Items[i].Free;
    end; 
    

    【讨论】:

    • 谢谢,我会尽快尝试。我说我的项目还没有创建 ShellListView,因为有些人要求提供代码,但我没有任何 shellListView 的代码,因为我会在需要时立即创建它。我只是想知道它是否有效以及我该怎么做。我从你那里得到了答案。
    • 这是否也适用于 for 循环以同时删除多个项目?
    • 应该可以,但是在编写代码时需要小心,因为每循环一次,项目的数量就会减少一个。但是只要项目列表不为空,删除 Item[0] 应该总是可以的。
    • 好吧,删除 Item[0] 可以正常工作,但正如您已经说过的,删除更多项目会导致错误,因为我正在减少项目数量并增加循环计数器。但我需要删除的项目不仅仅是第一个项目。你有什么建议它应该如何工作。我正在尝试解决它,但直到现在我还没有找到任何解决方案
    • 那你做错了,我很害怕。查看我刚刚发布的答案的更新。
    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多