form.loadメソッドを実行に不正処理が発生した場合など、
フォームを表示させずにこのメソッドを終了させるには
どうしたらよいのでしょうか。
form.load中にcloseメソッドを実行させてみましたが、
これでは閉じてくれないようです。
# DialogResult等もいじってみましたが変わりませんでした。
Private変数で不正処理の発生を取得して
Form_Activatedイベント内でHideメソッドとかで逃がしてやれば良いんじゃないですか?
# 質問時にはVBのバージョンやOS名を記載した方が良いですよ。
VB.NETはまだ一般的に普及してないようなので……。
返答ありがとうございます。
# うっかりしてました、環境は以下のとおりです。
# OS:Windows2000 SP3, IE6 SP1(+累積的な修正)
# VB:VB.net(VisualStudio.net Enterprise), .net Framework SP2
ShowDialog()でActivatedとHide()を使用すると、画面がモーダルなので、
閉じた後にフォームの操作が出来なくなってしまうんです。
Hide()の代わりにClose()を用いても動作せず、ちょっと手詰まりです。
# モーダル画面なんて使うんじゃなかった・・・(泣
確認したところ、確かにActivatedでHide()してもダメですね。
(普通はHide()すればShowDialog()以降の処理に移れるんですが……)
①あんまり好きな方法ではありませんが、Timerコントロールを使ってみてはどうでしょう?
不正処理が発生したらTimerのEnabledをTrueにして
TimerのTickイベントでフォームをClose()する。
一瞬画面が出てしまいますが……。
②『Windows フォーム デザイナで生成されたコード』内のNew()イベント内に
MyBase.OnLoad(System.EventArgs.Empty)
という命令を追加する。
こうするとフォームがNewされた時点でLoadイベントが発生するから
不正処理がなければLoadイベント内でShowDialog()すれば良い。
②についてはあんまり試して無いんでちょっと自信ないですが……。
2に関して、Loadイベントが2回実行されることと、
Ownerプロパティの手動設定を忘れなければなんとか使えそうです。
あとはSC_CLOSEをSendMessageするという反則ワザ(?)が
使えるかどうか、実験してみます。