動作をディスパッチするために、フォームが別のフォームを認識する必要がある場合。過去に、私はこれを必要とし、プロパティを使用して解決しました。今、私は同じ手順を実行しますが、うまくいきませんでした。
次の UML ダイアグラム クラスがあります。申し訳ありませんが、名前クラスが混乱しています。
したがって、ENPViewGeneric が ENPView を知っている必要があります。そして、子供たちはその知識を継承します。
私はENPViewGenericで試します:
unit EnpViewGeneric;
[...]
protected
{ Protected declarations }
FENPForm: TENP;
public
{ Public declarations }
property ENPForm: TENP read FENPForm write FENPForm;
[...]
ENPViewAddAfterインスタンス化は、 ENPViewインスタンス内で実行されます。
procedure TENP.optAddLastOfClick(Sender: TObject);
var
AfterForm: TEnpAddAfter;
begin
AfterForm := TEnpAddAfter.Create(self);
AfterForm.ENPForm := self;
AfterForm.ShowModal();
end;
ここで、ENPViewAddAfterインスタンスは、ENPView インスタンスにクエリを実行する必要があります。そのため、 ENPViewでクエリを実行するパブリック メソッドを定義しました。メソッドは次のとおりです。
function getSelectedRowValues(): TStringList;
したがって、このコードは最初の行でアクセス違反で失敗します。
procedure TEnpAddAfter.FormCreate(Sender: TObject);
var
row: TStringList;
nroMuestraNvo: integer;
begin
row := ENPForm.getSelectedRowValues();
nroMuestraNvo := StrToInt(row[0]) + 1;
muestra.Text := IntToStr(nroMuestraNvo);
end;
何か案は ?。