我担心这可能是一个“一段字符串有多长”的问题,但想知道是否有人有一些确切的数字或建议。
我有一个 TStringGrid,它可能有 3,600 行,也许更多,我们还不确定。由于监视器显然没有空间,因此屏幕上只显示 20 或 30 行。不幸的是,这些是第一个写入的,用户必须向下滚动才能看到添加的行。
颠倒行的顺序可能对用户更友好,m 最新的第一个和最旧的最后一个。要做到这一点,我需要做这样的事情(代码可能不准确)
// slightly quicker if there are many rows & no flicker
myStringGrid.Visible := False;
rowCount := myStringGrid.RowCount;
for row := 1 to Pred(rowCount) do
myStringGrid.Rows[row + 1] := myStringGrid.Rows[row];
myStringGrid.RowCount := myStringGrid.RowCount + 1;
// now add new row...
myStringGrid.Cells[1, 0] := <somthing>;
myStringGrid.Cells[1, 1] := <somthing else>;
myStringGrid.Cells[1, 2] := <etc>;
TestRunDataStringGrid.Visible := True;
我担心性能。如果没有人有任何经验,我将编写一个测试并报告回来。
只是想知道是否有人有这样做的经验或意见...
最佳答案
试试这个
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
---
---
private
{ Private declarations }
public
{ Public declarations }
end;
type
TStringGridHack = class(TStringGrid)
protected
procedure InsertRow(ARow: Longint);
end;
implementation
{$R *.dfm}
procedure TStringGridHack.InsertRow(ARow: Longint);
var
iRow: Integer;
begin
iRow := Row;
while ARow < FixedRows do Inc(ARow);
RowCount := RowCount + 1;
MoveRow(RowCount - 1, ARow);
Row := iRow;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TStringGridHack(StringGrid1).InsertRow(1);
end;
关于delphi - 在大 TStringGrid 的顶行插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4591464/