2010-03-18 109 views
1

共有6个表格,1基地和5 inherited.The基地拥有下面的代码片段:德尔福7继承

procedure TMechan.Open1Click(Sender: TObject); 
begin 
    if OpenDialog1.Execute then 
    Form1.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 
    CopyCylMemoToRecord; 
    ShowMechanicalValues; 
end; 

因为这个片段是它也由5人继承的基础。问题是:在执行OpenDialog时,Base被覆盖而不是继承的形式。 HELP

回答

10

我不太确定你的意思什么基地覆盖但你在你的代码Form1使用也许应该改为Self

Form1全局引用一个实例(可能)是您的基本形式。您可以创建一个zillion TMechan表单实例,其中每个Open1Click将更改该一个表单的属性。

我假设表单是自动创建的。虽然这很容易实现,但我强烈建议您不要自动创建每个表单并尽可能删除所有对表单的全局引用(如此表单1)。

应该得到自动处理的唯一形式是您的主要形式。必要时应该创建的所有其他形式,像myform := TMechan.Create(AOwner);

procedure TMechan.Open1Click(Sender: TObject); 
begin 
    if OpenDialog1.Execute then 
    Self.Memo1.Lines.LoadFromFile(OpenDialog1.FileName); 
    CopyCylMemoToRecord; 
    ShowMechanicalValues; 
end; 
+0

JFTR:在点前的时间“自我” 99.999%是多余的,即'Self.Something(SomeParameters);'是一样的'东西(SomeParameters);'。 – 2010-03-18 15:03:04

+0

@Ulrich Gerhardt - 不错,但是花了一些时间编程c#并使用像FxCop这样的工具鼓励使用'this'后,我发现自己更多地写'Self'来提高可读性。这种偏离*非常*主观。 – 2010-03-18 15:26:44