1

DialogResultを返すメッセージボックスを作成しました。今、私はそれにチェックボックスを追加しました、そしてそれがチェックされているかどうか知りたいです。だから私は何を返す必要がありますか?私が考えた簡単な方法は、DialogResultのすべての値に加えて、チェックボックスのステータスを示す値を持つ新しい列挙型を作成することです。

public enum MyDlgResult
{
    NONE = DialogResult.NONE, 
    OK = DialogResult.OK ........................, 
    CHKBOXCHECKED = 8
}

...そしてこの列挙型MyDlgResultを返します。しかし、これは正しいアプローチですか?新しい機能がメッセージボックスに追加されるたびに、この列挙型に値を追加する必要があるためです。
もしあれば、これを行うためのより良い方法。ありがとうございました。

4

3 に答える 3

3

そのメッセージボックスにプロパティを追加するだけです。これは、CheckBoxのCheckedプロパティのプロキシになり、[OK]結果フォームのメッセージボックスで、その新しいプロパティをチェックします。

追加するプロパティ

public bool Checked
{
   get { return yourCheckBox.Checked; }
}

そしてこのような最終的なコード

MessBox box = new MessBox();
if(box.Show() == DialogResult.OK)
{
   bool isChecked = box.Checked;
}
于 2012-05-04T13:39:06.633 に答える
1

クライアントコードがUIコントロールの状態を取得できるようにするために、ダイアログの戻り値をオーバーライドする必要はありません。ダイアログ情報は閉じた後も保持され、そこから値を取得できます。たとえば、PublicDlgPropertyというプロパティを持つSomeDlgという名前のFormクラスがあるとします。PublicDlgPropertyは、OKまたはその他のUI変更で設定し、ダイアログを閉じた後に次のようにクエリを実行できます。

var someDlg = new SomeDlg();
someDlg.ShowDialog();

var someLocalVariable = someDlg.PublicDlgProperty;

これは非常に単純な例です。DialogResultをテストして、値を照会するかどうかを確認する必要があります。

于 2012-05-04T13:38:45.917 に答える
0

IsCheckedなどを委任して、プロパティが必要であると答えた他の両方の人に同意しますが、返される列挙型の結果のみを使用してそれを行う必要がある場合は...

列挙型にフラグを付けます:

[Flags]
public enum MyDlgResult
{
    NONE = ...
    OK = ...
    CHK...
}

次に、次のように戻ることができます。

return MyDlgResult.NONE | MyDlgResult.CHK;

または

return MyDlgResult.OK | MyDlgResult.CHK;

あるいは単に

return MyDlgResult.OK;

など...次に、次のことを確認できます。

if (res.HasFlag(MyDlgResult.OK))
{
}

if (res.HasFlag(MyDlgResult.CHK))
{
}
于 2012-05-04T13:40:20.067 に答える