2010-03-18 5 views
1

Есть 6 форм, 1 Base и 5 inherited.The Base имеет следующий фрагмент кода:Delphi 7 Наследование

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

Поскольку этот фрагмент кода в базе он также унаследовал от 5 других. Проблема заключается в следующем: при выполнении OpenDialog база перезаписывается вместо унаследованной формы. HELP

ответ

10

Я не совсем уверен, что вы имеете в виду с База переписывается но ваше использование Form1 в вашем коде, вероятно, следует изменить на Self.

Form1 является глобальной ссылкой на один экземпляр (возможно) вашей базовой формы. Вы могли бы создать миллионы экземпляров форм TMechan, где каждый Open1Click будет изменять свойство этого One Form.

Я предполагаю, что формы автосозданы. Хотя это легко сделать, я бы настоятельно советовал вам не автосоздавать каждую форму и удалять все глобальные ссылки на формы (например, эту форму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);'. –

+0

@Ulrich Gerhardt - правда, но, потратив некоторое время на программирование C#, и используя такие инструменты, как FxCop, поощряющие использование 'this', я чаще нахожу себя« Self », чтобы повысить удобочитаемость. Этот отрыв * очень * субъективен. –