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


mawxiwtz  2002-12-16 23:37:17  No: 76633

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

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

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


takk  2002-12-17 01:15:54  No: 76634

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

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


mawxiwtz  2002-12-17 05:21:52  No: 76635

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

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

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

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

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


takk  2002-12-17 19:26:40  No: 76636

確認したところ、確かに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-18 03:37:41  No: 76637

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加