有两种形式。在第二种形式 - StringGrid,在设计中以各种方式装饰,配置等。任务是在操作 StringGrid 后在运行时快速将其恢复为原始形式。不希望以编程方式记住其状态以供后续恢复,因为 这是非常耗费人力的,所以我决定: a) 在更改之前保存 StringGrid 的状态;b) 更改后销毁 StringGrid;c) 重新创建(恢复)原始 StringGrid。
var
Form1: TForm1;
TempSG: TStringGrid;
implementation
{$R *.dfm}
procedure TForm1.SaveForm2SG1Click(Sender: TObject);
begin
TempSG := Form2.SG1;
end;
procedure TForm1.DestroyForm2SG1Click(Sender: TObject);
begin
if Form2.SG1 <> nil then FreeandNil(Form2.SG1);
end;
procedure TForm1.RestoreForm2SG1Click(Sender: TObject);
begin
if Form2.SG1 = nil then
begin
Form2.SG1 := TempSG; // ерунда, т.к. объекта нет!
Form2.SG1.Parent := Form2; // AV
end;
end;
一般来说,我想了解如何保存 StringGrid 的状态,然后使用之前保存的状态动态创建一个新的 StringGrid?
PS最初动态创建带有所有属性的StringGrid,我会重复一遍,不感兴趣。关于其他事情的问题。
PS 你不需要
FreeAndNil检查nil.线后
两个引用指向内存中的同一个对象。当为空/更改时
tempForm2.SG1(不确定调用时是否会发生这种情况RemoveComponent),Form2.SG1继续指向该对象。