tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^3: vbModeless と vbModal
投稿日: 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
のように書けば、無駄な待機ループは不要です。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。