3

私はDelphiフレームを開発しており、最初にビジネスオブジェクトのリストをグリッドコントロールにロードする必要があります。DelphiフレームにはOnCreateイベントがないので、これを複製するための最良の方法は何ですか?Aboutで提案されているようにコンストラクターをオーバーライドする必要がありますか?パブリックloadData()プロシージャを作成し、作成の準備ができたら親コンテナにそれを呼び出させる必要がありますか?

すべての子コントロールがロードされ、データを入力する前に準備ができていることを確認したいのですが、Delphiコンポーネントの作成階層に精通していません。

4

2 に答える 2

3

データの入力と作成を結び付けることはしません。フレームを合理的に作成して保持することはできますが、後で表示するコンテンツを変更することができます。入力する場合onCreateは、新しいデータを取得するために解放して再作成する必要があります。したがって、を持っていることLoadData()はより良いアプローチです。

アプリの複雑さや、使用しているフォームとフレームの数によっては、すべてのフレームを共通のベースフレームから継承させると便利な場合があります。次に、ベースに仮想LoadDataメソッドを導入し、フレームサブクラスでオーバーライドすることができます。

または、インターフェイスを設計してフレームに実装させることもできます。適切に行うと、フォーム、フレーム、さらにはパネルなどを均一に処理できるようになります。

GUIとアプリの複雑さに依存するため、より具体的なアドバイスを提供することは困難です。一般に、フォーム/フレームにロジック/コードをできるだけ少なくすることは常に良いことです。したがって、フォーム/フレームの登録と表示を処理するある種のFormManagerクラスを導入すると、この動作を1つの場所に分離するのに役立ちます。ただし、小さくてシンプルなアプリの場合は、フォームで実行するだけで問題を解決できます。

于 2010-08-16T14:14:02.017 に答える
0

私は通常、2つの異なるアプローチのいずれかを選択します。

  1. すべてのアイテムを含むか、それらを取得する方法を知っているある種のオブジェクトを取得するオーバーライドされたコンストラクター(例:列挙子)
  2. 同じ種類のオブジェクトのセッターを持つプロパティ

このようにして、オブジェクトを取得する方法のロジックを別の場所に隠すことができます。

(これはすでに行っていることかもしれませんが、「LoadData」という名前は、他の誰かが以前にフェッチしたデータを表示するだけでなく、実際にはある種のストレージリポジトリからデータをロードすることになると私に信じさせます...)

于 2010-08-16T19:43:21.360 に答える