2016-10-03 14 views
1

私はDBGridを持つmainFormを持っていますが、ユーザーが選択するすべてのDBGrid列を示すCheckListBoxを持つ2番目のフォームがあります。 Form2で、MainFormにあるDBGridを参照する必要があります。 この2番目のフォームは、dbdgridカラムに接続されているすべてのプロシージャを処理するので、簡単に再利用できます。 それはアイデアでしたが、私はDBGridリファレンスを渡す方法を見つけませんでした。 可能ですか?別のフォームからDBGridを参照する方法

答えて

2

、あなたのForm2上で、プロパティを定義

TForm2 

[...] 
private 
    FGrid : TDBGrid 
public 
    property Grid : TDBGrid read FGrid write FGrid; 

、あなたがTForm2のインスタンスを作成した後、ちょうどForm2の上、次に

Form2.Grid := MainForm.DBGrid1; 

を行い、 Gridを変更したいものを有効にして、MainForm.DBGrid1に変更を加えます。

+0

提案をお寄せいただきありがとうございます。私は試して、それが動作するように見えます。 Form2では、メインフォームのDBGrid列を移動するときに何かする必要があります。メインフォームでは、私はOnColumnMovedを使用していたでしょう... – Stark

+0

元の質問に答えましたので、緑色の「ダニ」アイコンをクリックして受け入れると良いでしょう。 OnColumMovedイベントでは、Form2に同じパラメータシグネチャを持つプロシージャを渡し、コードを記述し、MainForm.DBGrid1のOnColumnMovedをそのイベントに割り当てます。 – MartynA

1

可能ですか?

質問はむしろ私が欲しいものを達成する良い方法はありますか?

  • Form2が異なるフォームからの制御と基本的に働いていた場合には、保守でしょうか?他のフォームが他のフォームのコンポーネントへの参照を保持する必要がある場合はどうなりますか?
  • コントロールが異なる形式で使用されている場合、バグを発見するのに1年以内にどれくらい難しいでしょうか?
  • このような解決策はSOLID principlesと一致しますか?

これらの質問に答えると、別のアプローチを探すのに役立ちます。

separate UI and business logicを考慮する必要があります。 A TDBGridは、データベースからアプリケーションにデータを取得する便利な方法ですが、同時にデータをロードして表示するため、単一責任原則に違反しています。アプリケーション内の基本データプロバイダとして使用しないでください。ソフトウェアのより深いUI独立層からSQLクエリを実行します。コンテナに結果を格納し、さまざまなフォームに必要なすべての方法で表示します。そして、あなたが尋ねた質問に答える

+0

私はあなたが原則として正しいと思いますが、より良い方法を見つけるためにどこから始めるべきかはわかりません。さらに、これは、DBGrid列のレイアウトを表示するセカンダリフォームが常にDBGridを使用する場合です。 – Stark

関連する問題