ShowDialogでフォームを閉じるには?


mawxiwtz  2002-12-16 14:37:17  No: 76633  IP: [192.*.*.*]

form.loadメソッドを実行に不正処理が発生した場合など、
フォームを表示させずにこのメソッドを終了させるには
どうしたらよいのでしょうか。

form.load中にcloseメソッドを実行させてみましたが、
これでは閉じてくれないようです。

# DialogResult等もいじってみましたが変わりませんでした。

編集 削除
takk  2002-12-16 16:15:54  No: 76634  IP: [192.*.*.*]

Private変数で不正処理の発生を取得して
Form_Activatedイベント内でHideメソッドとかで逃がしてやれば良いんじゃないですか?

# 質問時にはVBのバージョンやOS名を記載した方が良いですよ。
   VB.NETはまだ一般的に普及してないようなので……。

編集 削除
mawxiwtz  2002-12-16 20:21:52  No: 76635  IP: [192.*.*.*]

返答ありがとうございます。

# うっかりしてました、環境は以下のとおりです。
# OS:Windows2000 SP3, IE6 SP1(+累積的な修正)
# VB:VB.net(VisualStudio.net Enterprise), .net Framework SP2

ShowDialog()でActivatedとHide()を使用すると、画面がモーダルなので、
閉じた後にフォームの操作が出来なくなってしまうんです。

Hide()の代わりにClose()を用いても動作せず、ちょっと手詰まりです。

# モーダル画面なんて使うんじゃなかった・・・(泣

編集 削除
takk  2002-12-17 10:26:40  No: 76636  IP: [192.*.*.*]

確認したところ、確かにActivatedでHide()してもダメですね。
(普通はHide()すればShowDialog()以降の処理に移れるんですが……)

①あんまり好きな方法ではありませんが、Timerコントロールを使ってみてはどうでしょう?
不正処理が発生したらTimerのEnabledをTrueにして
TimerのTickイベントでフォームをClose()する。
一瞬画面が出てしまいますが……。

②『Windows フォーム デザイナで生成されたコード』内のNew()イベント内に
  MyBase.OnLoad(System.EventArgs.Empty)
という命令を追加する。
こうするとフォームがNewされた時点でLoadイベントが発生するから
不正処理がなければLoadイベント内でShowDialog()すれば良い。


②についてはあんまり試して無いんでちょっと自信ないですが……。

編集 削除
mawxiwtz  2002-12-17 18:37:41  No: 76637  IP: [192.*.*.*]

2に関して、Loadイベントが2回実行されることと、
Ownerプロパティの手動設定を忘れなければなんとか使えそうです。

あとはSC_CLOSEをSendMessageするという反則ワザ(?)が
使えるかどうか、実験してみます。

編集 削除