gpt4 book ai didi

delphi - TListView : Subitem order after adding a new column between existing during runtime

转载 作者:行者123 更新时间:2023-12-03 15:31:14 37 4
gpt4 key购买 nike

如果您在运行时在现有列之间添加新列,则子项索引不会像我想象的那样。

例如在第二列和第三列之间添加新列后,列/子项如下所示:

colums[0] |  colums[1]   |  (new) columns[2] |  columns[3]
caption | subitems[0] | subitems[2] | subitems[1]

但我假设:

colums[0] |  colums[1]   |  (new) columns[2] |  columns[3]
caption | subitems[0] | subitems[1] | subitem[2]

我需要能够在某些条件下动态更新子项的内容。这就是为什么我想依赖这样的假设:Column.Index = X 的列的子项位于 Item.SubItems[X-1]。

您认为这是默认且指定的行为吗?如果是这样,您建议如何根据列更新子项目。一种可能性可能是保存属于最近添加的列的子项索引。

注意:Columns.Tag 属性已在使用中。

我正在使用 Delphi XE 和 XE2,但我需要与 Delphi 7 及更高版本兼容。

最佳答案

您不需要保存索引位置,您可以随时向 ListView 控件本身询问列的原始位置:

procedure TForm1.Button1Click(Sender: TObject);
var
ColumnOrder: array of Integer;
begin
SetLength(ColumnOrder, ListView1.Columns.Count);
ListView_GetColumnOrderArray(ListView1.Handle, ListView1.Columns.Count,
PInteger(ColumnOrder));


对于问题中的示例,ColumnOrder 数组将保存 (0, 1, 3, 2)。如果我们要更新新插入列(左起第三列)的子项,那么它的原始位置是“3”。代码示例:

var
ColumnOrder: array of Integer;
SubIndex: Integer;
begin
SetLength(ColumnOrder, ListView1.Columns.Count);
ListView_GetColumnOrderArray(ListView1.Handle, ListView1.Columns.Count,
PInteger(ColumnOrder));

SubIndex := ColumnOrder[2]; // We want to update 3rd column from left
// (visually -> SubItems[1])

// Test if the index is not 0, otherwise it holds an *item*,
// not a subitem (the first column can change position too).
if SubIndex > 0 then begin
Dec(SubIndex); // VCL subitems are 0 based
ListView1.Items[1].SubItems[SubIndex] := 'updated!';
end;


请注意,如果您要添加列而不仅仅是对现有列重新排序,则只有在修复了 other question 中的错误后,此操作才有效。 (如果您不这样做,则根本不可能同时提供列重新排序和列添加功能)。


关于默认行为是否应该如此,假设您有一个 ListView ,您正在显示包含“名称”、“大小”、“日期”列的文件信息。作为开发人员,您不应该担心用户可能将“大小”列放在何处,只需将信息放入“SubItems[0]”即可。此外,如果用户拖动“名称”列,它是否会从项目降级为子项目。

我认为期望项目/子项目遵循各自的列是合乎逻辑的。

关于delphi - TListView : Subitem order after adding a new column between existing during runtime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8327500/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com