2

子コンポーネント コントロールのプロパティにアクセスするための標準は何か疑問に思っています。

たとえば、ラベルを持つ子ウィンドウを作成するメイン フォームがあります。Delphi を使用すると、ChildForm.Label.Caption := 'text' を実行するだけで済みますが、何らかの理由でそれが間違っているように感じます。テキストを設定するもう 1 つの方法は、設定時にラベル キャプションを更新するメソッドを呼び出す ChildForm のプロパティを設定することです。

これを何らかの方法で行う必要がある理由はありますか?

4

1 に答える 1

2

考えられる可能性は次の 4 つです。

  • a:あなたが示唆するように、子フォームのコンポーネントとそのプロパティへの直接アクセス

    ChildForm.Label.Caption := 'text',
    

プラス: 迅速かつ簡単。マイナス: 子フォームの「内部」が不必要に外部に公開され、その結果、呼び出しコードがより脆弱になる可能性があります。

  • b: 子フォームの新しく公開されたプロパティを介したアクセス

    ChildForm.LabelCaption := 'text',
    

プラス: IDE フォーム デザイナーを介してプロパティを簡単に設定できるようにする場合に便利です。上記の「a」よりも優れたカプセル化。マイナス:おそらく私の最も嫌いなアプローチですが、その理由を正確に説明することはできません. プロパティは強力ですが、内部で発生するすべてのことが少し心配です

  • c: 子フォームセッターメソッド経由でアクセス

    ChildForm.SetCaption('text')
    

プラス: B よりもシンプルですが、同じようにカプセル化が改善されており、(私の考えでは) 少しすっきりした感じがします。

  • d: セットアップの場合は、追加のコンストラクター引数を介してアクセスします

多くの場合、フォームを作成するときにフォームを少しカスタマイズできるようにしたいだけです。この場合、コンストラクターにパラメーターを追加するのが最も簡単な方法です。これにより、プロパティの「読み取り可能な」性質について心配する必要がなくなり、フォームの作成時にキャプションが (外の世界に関する限り) 固定されるため、役立つ場合があります。

FormChild := TChildForm.Create(nil, 'test');

プラス:追加のプロパティまたはメソッドの手間を省きます。マイナス:すべての場合に当てはまるわけではありません。

于 2012-08-09T22:24:40.740 に答える