- PR -

DialogResultについて

1
投稿者投稿内容
koseki
ベテラン
会議室デビュー日: 2002/08/01
投稿数: 93
投稿日時: 2005-08-16 13:12
いつも参考にさせて頂いております。

DialogResultについて質問があります。

ある画面1から画面2をShowDialogで表示して画面2で押されたボタンによって処理を分けています。
画面2でOKとキャンセルの二つのボタンがあるとして、それぞれのDialogResultプロパティにOKとキャンセルが設定されています。
OKボタンを押された時、画面2上にあるテキストボックスの内容をチェックしています。
チェックでエラーがあった場合、フォーカスを当てて画面を閉じない様にしたい為、
クリックイベントでDialogResultにNoneを設定した所、画面が閉じてしまいます。

その為、最初のDialogResultプロパティでNoneを設定して、エラーが無かった場合クリックイベントでOKを設定した場合、今度は正しく閉じられませんでした。

フォームのClosingイベントでキャンセルすれば良いのかもしれませんが、
ボタンのクリックイベントでうまくやる方法はないでしょうか?

よろしくお願い致します。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-16 13:26
ひょっとしてDialogResultを設定した後this.Closeとか呼んでいるのでしょうか?
MSDNのDialogResultプロパティの解説を読めば分かりますが、DialogResultプロパティを設定した時点でダイアログは非表示になります。Closeを呼ぶ必要はありません。
//代わりに呼出元でDisposeを呼ぶべきですが。確かどこかにダイアログのインスタンスは使い回すべきでないという記事があったような気が。

画面を閉じないようにしたい場合、そもそもDialogResultプロパティを設定しなければいいだけです。
koseki
ベテラン
会議室デビュー日: 2002/08/01
投稿数: 93
投稿日時: 2005-08-16 13:35
Hongliangさん、ご回答ありがとうございます。

ちょっと勘違いをしていたようです。
ボタンのDialogResultをクリックイベント内で変更しても
直には有効にならないようです。
フォームのDialogResultを直接設定すれば良かったようです。

お手数、お掛けいたしました。
ありがとうございます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-08-16 14:17
引用:

//代わりに呼出元でDisposeを呼ぶべきですが。


そうですね。
DialogResult で戻り値を返すこと自体が、ShowDialog メソッドと同意ですから、
必ず、using または Try 〜 Finally で Dispose すべきだと思います。



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
1

スキルアップ/キャリアアップ(JOB@IT)