Delphi 在同一TVirtualStringTree中加载不同的数据

Delphi 在同一TVirtualStringTree中加载不同的数据,delphi,virtualtreeview,tvirtualstringtree,Delphi,Virtualtreeview,Tvirtualstringtree,在我的应用程序中,我的主窗体上有一个tc_主窗体,作为带有4个选项卡的TTabControl控件,还有一个vt_主窗体,作为TVirtualStringTree保留在其上。取决于所选的选项卡,vt_main中可能有不同的标题和数据。我为每个选项卡定义了不同的数据处理程序 Tvt_main = record column: array of String; end; Pvt_tab_equip = ^Tvt_main; Pvt_tab_insp = ^Tvt_main; Pvt_tab_ce

在我的应用程序中,我的主窗体上有一个tc_主窗体,作为带有4个选项卡的TTabControl控件,还有一个vt_主窗体,作为TVirtualStringTree保留在其上。取决于所选的选项卡,vt_main中可能有不同的标题和数据。我为每个选项卡定义了不同的数据处理程序

Tvt_main = record
  column: array of String;
end;

Pvt_tab_equip = ^Tvt_main;
Pvt_tab_insp = ^Tvt_main;
Pvt_tab_certif = ^Tvt_main;
Pvt_tab_doc = ^Tvt_main;

const
  sz_vt_main = SizeOf(Tvt_main);
现在的问题是,如何通过维护处理程序中的数据在选项卡和刷新vt_主视图之间切换,而不必从sql重新加载数据

在这一刻,当我试图更新头配置时,我得到了访问冲突

我会写一些代码。我希望你明白我的意思

procedure Tform_main.tc_mainChange(Sender: TObject);
begin
  //draw/redraw `vt_main header` each time TabIndex is changed.
  draw_vt_main_header;

  //if content not loaded, then load data from sql.
  if not vt_loaded[tc_main.TabIndex] then draw_vt_main;

  //search for some text
  search;
end;
下面是绘制/重画VT标题的过程

procedure Tform_main.draw_vt_main_header;
var
  tab_index, i: Word;
begin
  tab_index:= tc_main.TabIndex;

  vt_main.Header.SortColumn:= -1;
  vt_main.Header.Columns.Clear;

  if Length(vt_header[tab_index].column) > 0 then
    for i := 0 to High(vt_header[tab_index].column) do
      if vt_header[tab_index].column[i].position >= 0 then
        with vt_main.Header.Columns.Add do
          begin
            Text:= vt_header[tab_index].column[i].caption;
            Width:= vt_header[tab_index].column[i].width;
            Position:= vt_header[tab_index].column[i].position;

            if vt_header[tab_index].column[i].visible then
              Options:= Options + [coVisible]
            else
              Options:= Options - [coVisible];

            CaptionAlignment:= taCenter;
            Alignment:= vt_header[tab_index].column[i].alignement;
          end;
end;

问问自己为什么要将数据放入控件?用虚拟的方式去做,前进的道路是微不足道的。对不起,我不明白。请更加明确。将数据存储在单独的数据结构中。使用虚拟范例演示它?如果这没有任何意义,请阅读VTV文档。您的建议是创建一个变量并存储所有数据,然后每次更改选项卡以将适当的数据分配给VT处理程序指针?基本上就是这样。