タイトル | : Re^3: vbModeless と vbModal |
記事No | : 15053 |
投稿日 | : 2010/11/30(Tue) 16:28 |
投稿者 | : 魔界の仮面弁士 |
> なので、なぜvbModalを使わず、whileを使用して回りくどい書き方をしているのか、と > 疑問に思った次第です。 もしかしたら、古いソースを転用し続けてきた時の名残なのかもしれません。
作った本人にしか分からないところではありますが、かつて、 古いバージョンの VB において、モーダルフォームの扱いに問題があり、 モードレスフォームで親フォームを Enabled = False にすることで 代用するケースが稀にありました。その時の処理手順に似ています。
ただし、仮にその時代のソースなら、 settingForm.Show vbModeless ではなく、 settingForm.Show 0 ', frmMain などと書いてるだろうとは思いますけれどね。
もう一つの可能性としては、 Option Explicit Private Sub Command1_Click() MsgBox "TEST" End Sub Private Sub Timer1_Timer() Caption = Timer End Sub のようなコードを書いた場合において、メッセージボックスの表示中は 「EXE ならば Timer イベントが動作するが、 開発環境では Timer イベントが発生しない」 という状況になるので、この MsgBox の動作を、モーダルフォームにおいても 同じような動きになると勘違いしていたという可能性もあるかも知れません。
> Timer1は別スレッドではないにしろ、vbModal,vbModelessに関係なく動くようです。 いずれにせよ、Sleep の利用は避けた方が良いと思います。
モーダルなら待機ループは不要ですし、仮に モードレスにするにしても、VB4 以降ではイベントベースで Private WithEvents child As Form Private Sub settingFormOpen() frmMain.Enabled = False Set child = settingForm child.Show vbModeless, frmMain End Sub Private Sub child_Unload(Cancel As Integer) frmMain.Enabled = True frmMain.SetFocus Set child = Nothing End Sub のように書けば、無駄な待機ループは不要です。
|