当 GroupView 处于活动状态时,向 TListView 添加或插入项目始终将其添加到末尾

Pav*_*van 5 delphi delphi-2009

在德尔福 2009 中:

当 TListView 的 GroupView 处于活动状态时,向 TListView 添加或插入项目总是将其添加到列表的末尾,而不管指定为参数的 Index。当 GroupView 设置为 false 时,它​​会将其添加到指定的索引处。但是当它为真时,这种行为是看不到的。

ListView2.Items.Insert(1)
Run Code Online (Sandbox Code Playgroud)

以上应在指定索引“1”处插入项目,但始终将其添加到列表的末尾。我在这里做错了什么?

object ListView2: TListView
Left = 32
Top = 40
Width = 161
Height = 233
BorderWidth = 5
Columns = <
  item
    AutoSize = True
  end>
DoubleBuffered = False
FlatScrollBars = True
Groups = <
  item
    Header = 'test'
    Footer = 'aksdlkajsd;flkj'
    GroupID = 0
    State = [lgsNormal]
    HeaderAlign = taLeftJustify
    FooterAlign = taLeftJustify
    Subtitle = 'adgasdfasdf'
    TopDescription = 'test desc'
    BottomDescription = 'adsfasdfasdf'
    TitleImage = 0
    ExtendedImage = 0
  end
  item
    Header = 'test1'
    GroupID = 1
    State = [lgsNormal]
    HeaderAlign = taLeftJustify
    FooterAlign = taLeftJustify
    TopDescription = 'test1 desc'
    TitleImage = 1
    ExtendedImage = 1
  end>
HideSelection = False
IconOptions.WrapText = False
Items.ItemData = {
  03D80000000500000000000000FFFFFFFFFFFFFFFF0000000000000000000000
  0003740077006F00FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000
  086100730064006600610073006400660000000000FFFFFFFFFFFFFFFF000000
  000000000000000000057400680072006500650000000000FFFFFFFFFFFFFFFF
  000000000000000000000000036F006E00650000000000FFFFFFFFFFFFFFFF00
  00000000000000000000001866006F0075007200320033003300330033003300
  33003300330033003300330033003300330033003300330033003300}
MultiSelect = True
GroupView = True
ParentDoubleBuffered = False
ShowColumnHeaders = False
TabOrder = 0
ViewStyle = vsReport
Run Code Online (Sandbox Code Playgroud)

结尾

和代码添加项目@ index 0

procedure TForm1.Button1Click(Sender: TObject);
var
  oListItem: TListItem;
begin
  oListItem := ListView2.Items.Insert(0);
  oListItem.Caption := 'CCCCCCCC';
  oListItem.GroupID := 0;
end;
Run Code Online (Sandbox Code Playgroud)

谢谢和问候,帕万。

小智 0

您可能需要将新的 ListItem 分配给 GroupIndex,假设您首先添加了至少 1 个 Group 并为其指定了 ID。

var 
  item:  TListItem;
begin
  item:= ListView.Items.Add;
  item.GroupID=0;
end;
Run Code Online (Sandbox Code Playgroud)

或者您可以先创建 TListItem 对象,为其指定 GroupID 并使用 ListView.Items.AddItem(item, index) 将其添加到 ListView。