1

動作をディスパッチするために、フォームが別のフォームを認識する必要がある場合。過去に、私はこれを必要とし、プロパティを使用して解決しました。今、私は同じ手順を実行しますが、うまくいきませんでした。

次の 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;

何か案は ?。

4

0 に答える 0