1
Delphiでフレームを使用し始めました。フレームの操作(Delphi)
フレームはFrameBar1にあり、両方とも表示されます。テストのためだけに、最初に1つのボタンがあり、2つ目のフレームに1つの編集が含まれています。
ボタンをクリックして編集でテキストを変更したいとします(2つの異なるフレームのコントロール)。
どのようにフレーム間で通信しますか?
Delphiでフレームを使用し始めました。フレームの操作(Delphi)
フレームはFrameBar1にあり、両方とも表示されます。テストのためだけに、最初に1つのボタンがあり、2つ目のフレームに1つの編集が含まれています。
ボタンをクリックして編集でテキストを変更したいとします(2つの異なるフレームのコントロール)。
どのようにフレーム間で通信しますか?
コントロールが同じフォームにある場合と同じ方法です。ちょうどそれを所有するFrameオブジェクトを編集コントロールを接頭辞、例えば:
uses
Frame1Unit, Frame2Unit;
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame1 := TFrame1.Create(Self);
Frame1.Parent := ...;
...
Frame2 := TFrame2.Create(Self);
Frame2.Parent := ...;
...
end;
uses
Frame2Unit;
procedure TFrame1.Button1Click(Sender: TObject);
begin
Frame2.Edit1.Text := '...';
end;
よりよい設計はFRAME1とフレーム2は、お互いを知らないので、ロジックをカプセル化することです。
uses
Frame1Unit, Frame2Unit;
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame1 := TFrame1.Create(Self);
Frame1.Parent := ...;
Frame1.OnNewText := Frame1Text;
...
Frame2 := TFrame2.Create(Self);
Frame2.Parent := ...;
...
end;
procedure TForm1.Frame1Text(Sender: TObject; const NewText: string);
begin
Frame2.EditText := NewText;
end;
type
TFrame1TextEvent = procedure(Sender: TObject; const NewText; string) of object;
TFrame1 = class(TFrame)
Button1: TButton;
procedure Button1Click(Sender: TObject);
public
OnNewText: TFrame1TextEvent;
end;
procedure TFrame1.Button1Click(Sender: TObject);
begin
if Assigned(OnNewText) then
OnNewText(Self, '...');
end;
:FRAME1は、ボタンがクリックされたときに、それが発火するというイベントを公開して、親フォームがそのイベントにハンドラを割り当て、フレーム2上のテキストを割り当てることができ、例えば持っています
type
TFrame2 = class(TFrame)
Edit1: TEdit;
private
function GetEditText: string;
procedure SetEditText(const Value: string);
public
property EditText: string read GetEditText write SetEditText;
end;
function TFrame2.GetEditText: string;
begin
Result := Edit1.Text;
end;
procedure TFrame2.SetEditText(const Value: string);
begin
Edit1.Text := Value;
end;
フレームは自己完結型であることを意図しています。このようなやりとりを扱うのはその親です。それは可能ではないが、設計によってではない。あなたが1つの場所でフレームを使用するだけなら、それは意味をなさないことに注意してください。フレームは、同じセットのコントロールを何度も再利用することを意図しています。 –
@JerryDodgeフレームには、再利用以外にも多くの利点があります。フレームには親フォーム(分離)に入れたくない複雑なコードを入れることができます。スワッピングなどには最適です。 –
@JohnEasley Trueですが、私は常に埋め込みフォームを使用します。はるかに柔軟性があります。たとえば、フレームにはOnCreate/OnDestroyイベントがありません。 –