【问题标题】:Listview Subitem Images列表视图子项图像
【发布时间】:2011-12-14 09:38:00
【问题描述】:

我是否遗漏了一些明显的东西,我找不到将 ImageIndex 分配给 TListView 的子项的方法。

我在 vsReportMode 中设置了 2 列的 Listview,我可以轻松地将 ImageIndex 分配给第一列项目,例如:

ListView1.Items[0].ImageIndex := 0;
ListView1.Items[1].ImageIndex := 1;
ListView1.Items[2].ImageIndex := 2;

我以为我可以将 ImageIndex 分配给它的 SubItems,类似这样(这显然不起作用,因为 SubItems 似乎不存在该属性)

ListView1.Items[0].SubItems[0].ImageIndex := 0;
ListView1.Items[1].SubItems[0].ImageIndex := 1;
ListView1.Items[2].SubItems[0].ImageIndex := 2;

我是不是又把自己弄糊涂了,还是 SubItem Images 没有这样的属性?

【问题讨论】:

    标签: delphi listview


    【解决方案1】:

    改用SubItemImages

    var
      LI: TListItem;
      i: Integer;
    begin
      ListView1.ViewStyle := vsReport;
      for i := 0 to 1 do
        with ListView1.Columns.Add do
          Caption := 'Column ' + IntToStr(i);
    
      for i := 0 to ImageList1.Count - 1 do
      begin
        LI := ListView1.Items.Add;
        LI.Caption := Format('Item %d', [i]);
        LI.ImageIndex := i;
        LI.SubItems.Add(Format('SubItem %d', [i]));
        LI.SubItemImages[0] := i; // SubItems[ColumnIndex] := ImageIndex;
      end;
    end;
    

    这会导致

    【讨论】:

    • 非常感谢 Ken,我没有忽略 SubItemImages,可能是因为我很确定这样的属性会在 SubItems[x] 中。
    • 这也是我所期望的,直到你的问题促使我调查它。 :)
    • 如果我不想在第一列中显示图像怎么办?如果我只想将图像分配给子项,我必须将 -1 分配给第一列的图像索引: li.ImageIndex := -1; li.SubItemImages[0] := 1;然后图像不会显示在第一列中,但第一列中的文本会随着图像的大小而偏移。
    • @tdiop:如果默认行为不适合您,您可以自定义绘制第一列。
    猜你喜欢
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2012-10-23
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多