6

そのため、現在、私のプロジェクトには、ユーザーに誕生日などのプロンプトを表示するようなカスタム ダイアログがいくつかあります。現時点ではthis.Birthday、回答が得られたらプロパティを設定するなどのことを行っているだけです (タイプDateTime?は で、null は「キャンセル」を示します)。次に、呼び出し元は、Birthday作成したダイアログのプロパティを調べて、ユーザーの回答を把握します。

私の質問は、このようなことを行うためのより標準的なパターンはありますか? 基本的な OK/Cancelを設定できることはわかっていますthis.DialogResultが、Windows フォームで「収集したデータはここにあります」と示すためのより一般的な方法はありますか?

4

5 に答える 5

9

カスタム ダイアログでプロパティを公開することは、標準的なダイアログ (Select/OpenFileDialog など) が行う方法であるため、慣用的な方法だと思います。探している結果を返す ShowBirthdayDialog() メソッドを使用する方がより明示的で意図が明らかであると主張する人もいるかもしれませんが、フレームワークのパターンに従うのがおそらく賢明な方法です。

于 2008-08-31T17:50:56.620 に答える
3

このようなことを行うためのより標準的なパターンはありますか?

いいえ、正しいアプローチを使用しているようです。

ダイアログが DialogResult.OK を返した場合、ダイアログ内のすべての必要なプロパティが有効であると想定します。

于 2008-08-31T17:36:44.080 に答える
2

私にとっては、標準のダイアログ応答を返すダイアログに固執し、プロパティを介して結果にアクセスすることが道です。

私が座っている2つの正当な理由:

  1. 一貫性 - あなたは常にダイアログで同じことをしており、質問の性質そのものがパターンが良いことを示唆しています (-: 同様に問題はこれが良いパターンかどうかです?
  2. ダイアログから複数の値を返すことができます - ここでもまったく新しい議論がありますが、適用されたプラグマティズムは、状況によってはこれが必要であることを意味し、値をパッケージ化して戻すことが常に適切または望ましいとは限りません。すべて一度に。

ロジックの流れも素晴らしい:

if (Dialog == Ok)
{
    // Do Stuff with the entered values
}
else
{
    // Respond appropriately to the user cancelling the dialog
}

それは良い質問です - 私たちはこのようなものに質問することになっています - しかし、私にとって現在のパターンはまともなものです.

マーフ

于 2008-08-31T18:20:13.960 に答える
1

モーダル入力ダイアログの場合、通常、ShowDialog をオーバーロードし、必要なデータのパラメーターを渡します。

DialogResult ShowDialog(out datetime birthday)

通常、フォーム クラスが公開する 100 以上のプロパティを自分のプロパティと混在させるよりも、発見して理解する方が簡単だと思います。

フォームの場合、通常、コントローラーと、読み取り専用プロパティを使用してデータを渡す IView インターフェイスがあります。

于 2008-08-31T19:14:18.900 に答える
0

私はいつもあなたが説明しているようにそれを正確に行ってきました. もっと受け入れられたアプローチがあるかどうかを知りたいです。

于 2008-08-31T17:29:29.713 に答える