2

ユーザー入力を収集するモーダル ダイアログが必要です。次に、メインフレーム アプリケーションで同じデータを使用する必要があります。

通常、モーダル ダイアログには、必要なものを格納できる DataType へのポインタがあり、ユーザーがモーダル ダイアログを閉じたときにデータを回復できるように、メインフレームからこのオブジェクトを参照で渡します。

これはデータをやり取りする最良の方法ですか?

気分が悪い!

4

4 に答える 4

3

ユーザーがダイアログを閉じると (おそらく DialogResult.OK で) データを渡すため、MainFrame の参照がなくても簡単にこれを行うことができます。

ダイアログに userNameTextBox と呼ばれる TextBox と、OK の結果でダイアログを終了するボタンがあるとします。userNameTextBox を public にするか (推奨されません)、プロパティを追加してテキストを返すことができます。

public string UserName
{
    get { return userNameTextBox.Text; }
}

ダイアログが終了した後にこの値を取得するには、次のようにします。

Dialog dialog = new Dialog();
if (dialog.ShowDialog() == DialogResult.OK)
{
    string username = dialog.UserName;
}
于 2008-11-01T17:18:18.180 に答える
1

ユーザーから1つまたは2つの値を収集する場合、@Samuelの提案は完全に適切です。

多くの値を取得している場合は、質問の解決策も問題ありません。

時期尚早の最適化の餌食になって、分離されたソリューションを過度に設計しないでください。境界オブジェクトによって、メインフレームとダイアログによって参照されるデータ構造インスタンスを参照していると思います。このオブジェクトを参照するダイアログとメインフレームの両方の問題は何ですか? このシナリオで境界/転送オブジェクトを分離する利点は何ですか?

ここで私が見た唯一のデカップリング ペイオフは、メインフレームにデータを配信する特定の実装からメインフレームをデカップリングすることです。したがって、メインフレームが Dialog をインスタンス化して Dialog.ShowModal を呼び出すのではなく、依存性注入によってメインフレームに IDataYouNeedGetter (たまたま同じモーダル ダイアログ) が提供され、適切なタイミングでメインフレームが実行します。

myGetter.SetTransferObject(dataStructInstance)
myGetter.GoGetTheData()
// do stuff with dataStructInstance now that myGetter set it up.

しかし、デカップリングの特定の必要性をすでに知っていない限り、間接的なレイヤーを追加する理由はありません。

于 2008-11-01T18:51:35.463 に答える
0

通常、単一のクラスまたは他のデータ型を使用してデータを転送できます。したがって、ダイアログはクラスのプロパティを変更するために使用されます。なぜこれが正しく感じられないのですか?

[ユーモア] メインフレームとは、大きくて古い (まだ生きていて動き回っている) コンピュータのことではないと思います。それ以外の場合は、TCP/IP が適していると思います。[/ユーモア]

于 2008-11-01T17:05:52.727 に答える
0

これを行う最良の方法は、データをイベントにパッケージ化し、イベント バスで送信することです。

これにより、ダイアログがメインフレームから切り離されます。また、イベントを適切に設計すれば、ダイアログの使用だけに制限されることはありません。

言語と環境によっては、このイベント システムを簡単かつ安価に実装できます。私はバージョン クラス ベースのオブジェクト間通信と呼んでいます。

于 2008-11-01T17:10:41.923 に答える