簡體   English   中英

TListView:在運行時在現有之間添加新列之后的子項順序

[英]TListView: Subitem order after adding a new column between existing during runtime

如果在運行時期間在現有列之間添加新列,則子項索引不會像我假設的那樣。

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

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及更高版本兼容。

您不需要保存索引位置,您可以隨時詢問列表視圖控件本身列的原始位置:

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數組將保持( ColumnOrder )。 如果我們想要更新新插入列的子項(左起第3列),則其原始位置為“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;


請注意,如果您要添加列而不僅僅是重新排序現有列,這只有在您修復了另一個問題中的錯誤時才會起作用(如果不這樣做,則再次執行,同時提供列重新排序和列無論如何都不可能添加功能)。


關於默認行為是否應該如此,假設您有一個列表視圖,您正在顯示具有列'name','size','date'的文件信息。 作為開發人員,您不應該擔心用戶可能放置“大小”列的位置,只需將信息放入“SubItems [0]”即可。 此外,如果用戶拖動“名稱”列,它將從項目降級為子項目。

我認為期望項目/子項目遵循各自的列是合乎邏輯的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM