0

正しい方法はわかりませんが、複数のフォームでロジックを再利用できるように、customcontrol を使用したい vb.net winform アプリがあります。親からこのコントロールに値を設定する方法を知っています(コントロールのプロパティを使用)。しかし、今は親フォームで特定の関数を呼び出したいと思っています。私の場合、親フォームのプロシージャである LoadData() です。これどうやってするの?

ユーザーコントロールで Me.ParentForm を使用して親フォームを参照できることはわかっています。しかし、親フォームで LoadData() プロシージャを呼び出すことはできません。

何か助けはありますか?これは ASP.NET アプリではなく、winforms アプリです。

ティア

[編集] ここにあるこの例を使用して問題を解決できました。これはうまくいっています

4

2 に答える 2

0

まず、aはGUIUserControlロジックを再利用するためのものです。非 GUI ロジックを再利用しようとしている場合は、そのためにいくつかのスタンドアロン クラスを作成することをお勧めします。

第二に、説明した方法で親フォームにコールバックするのは、一般的に悪い設計ですUserControl。可能であれば、UserControl代わりにデータを にプッシュする必要があります。

フォームがデータをプッシュ ダウンする方法が見つからない場合 (おそらく 内の UI インタラクションに基づいているためUserControl)、他にいくつかのオプションがあります。UserControl1 つ目は、初期化中にに渡すことができるオブジェクトにデータ読み込み動作をラップすることです。 は必要に応じてそのメソッドにUserControlアクセスできます。LoadDataもう 1 つの方法は、フォームから外部データを要求するために使用できる一連のイベントを UserControl で定義することです。この種のイベントでは、「クエリ」プレフィックスを使用するのが好きです。そのため、フェッチ ボタンが でタップされるとUserControl、「QueryData」イベントが発生し、そのイベントを処理しているフォームは、カスタム の一部である何らかのデータ コンテナに入力することによって応答しますEventArgs

さらに支援が必要な場合は、これらのいずれかを拡張できます。


質問を読み直すと、おそらく私のアプローチはやり過ぎのようです。LoadDataこれは、データを UserControl にロードする Form 内のメソッドであるという印象を受けました。単純な呼び出しの場合は、回答のイベント部分に注目し、データ コンテナー部分を無視してください。

于 2013-09-26T11:55:59.507 に答える