在Delphi中清空字符串网格

Pau*_*nes 3 memory delphi grid

在Delphi中,是否有一种快速清空TStringgrid(包含超过5000行)的方法,它还可以释放内存?

将rowcount设置为1,清空网格但不释放内存.

提前致谢,

保罗

TLa*_*ama 11

这应该取消初始化分配的字符串(从存储行文本的字符串列表).清理由列完成,因为您有很多行.

procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
begin
  for I := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cols[I].Clear;
  StringGrid1.RowCount := 1;
end;
Run Code Online (Sandbox Code Playgroud)


Ken*_*ite 5

“不释放内存”是指如果先设置RowCount := 1,然后再设置RowCount := 10' you can still see the old content of theCells`?

如果是这样,这是一个老问题,与未释放内存无关;这仅仅是因为您在再次分配内存时碰巧看到了内存的先前内容,因为内存没有被清零。

我在一个实用程序单元中有一个非常标准的例程来处理这个视觉故障,除非网格很大,否则工作速度足够快。只需TStringGrid RowCount或更改ColCount为较低值之前传递。

procedure ClearStringGrid(const Grid: TStringGrid);
var
  c, r: Integer;
begin
  for c := 0 to Pred(Grid.ColCount) do
    for r := 0 to Pred(Grid.RowCount) do
      Grid.Cells[c, r] := '';
end;
Run Code Online (Sandbox Code Playgroud)

像这样使用它:

ClearStringGrid(StringGrid1);
StringGrid1.RowCount := 1;
Run Code Online (Sandbox Code Playgroud)


Rem*_*eau 5

我建议将字符串值存储在您可以完全控制的自己的内存中,然后使用 TDrawGrid 或更好的虚拟 TListView 来根据需要显示该内存的内容。