2012-05-04 14 views
1

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

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

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

+0

チェックボックスには1つの列挙型を使用できます。 DialogResult列挙型は[冗長]です(http://msdn.microsoft.com/en-us/library/system.windows.forms.dialogresult.aspx)。 –

答えて

3

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

プロパティ

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

そして、私はあなたがにisCheckedか何かを委任、プロパティを持っている必要があることを、あなたに答え、両方の他の人に同意し

MessBox box = new MessBox(); 
if(box.Show() == DialogResult.OK) 
{ 
    bool isChecked = box.Checked; 
} 
+0

はい。これは私の問題をある程度解決します。しかし、私はUIからMessBoxのインスタンスを作成しません。 UIからボタンをクリックしたときの効果を得るには、 'MessBox.Show()' と私のクラス** MessBox **を呼び出してください。返り値** DialogResult ** like '返す新しいMessBox()。ShowDialog();' この場合、このコードを** MessBox.Show()** に書く必要があります。 UI ??ありがとうございました:) – quitprog

+0

** MessBox **クラスの別のプロパティを設定し、それをUIからアクセスすることでこれを行いました。これが間違ったアプローチであることをお勧めします。 ありがとうございました:) – quitprog

1

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

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

var someLocalVariable = someDlg.PublicDlgProperty; 

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

0

のような最終的なコードを追加しますが、もししますあなたはそれを返す列挙型の結果だけを使用して行う必要があります...

enumを作るフラグ:

その後
[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)) 
{ 
} 
関連する問題