EXEでのENDステートメント動作

このQ&Aのポイント
  • VB6.0(SP5)を使用しています。OSはXp Proです。自作アプリのEXEでの動作で困っています。ENDステートメントが正常に機能しません。
  • MDIフォームで、メインフォームのLoad中、何らかのエラー(DLLの初期化失敗など)が発生した場合に、ENDステートメントでアプリケーションを終了させています。VBでデバッグさせている状態だと問題無く終了します。しかし、コンパイル後のEXEで動作させると必ずメインMDIフォームを表示(起動?)します。
  • 自作アプリだけの問題かとも思い、下記のような単純サンプルを作成して確認しましたが、EXEで動作させるとやはり同様の症状が発生します。
回答を見る
  • ベストアンサー

EXEでのENDステートメント動作

VB6.0(SP5)を使用しています。OSはXp Proです。 自作アプリのEXEでの動作で困っています。ENDステートメントが正常に機能しません。 MDIフォームで、メインフォームのLoad中、何らかのエラー(DLLの初期化失敗など)が発生した場合に、ENDステートメントでアプリケーションを終了させています。 VBでデバッグさせている状態だと問題無く終了します。 しかし、コンパイル後のEXEで動作させると必ずメインMDIフォームを表示(起動?)します。 この時に起動されるメインMDIフォームは、各種メニュー等は起動不可で、右上×印の終了ボタンのみ機能します。 ToolBarコントロールを使用しているか否かで、症状が変わります。 (1)MDIフォームにToolBarコントロールを組み込んだ状態  上記、MDIフォームが表示される現象が発生します。 (2)MDIフォームにToolBarコントロールを組み込んでいない状態  正常に終了します。 ToolBarコントロールのプロパティを何か変更する必要があるのでしょうか? 自作アプリだけの問題かとも思い、下記のような単純サンプルを作成して確認しましたが、EXEで動作させるとやはり同様の症状が発生します。 ------------------------------------------------- Private Sub MDIForm_Load() End  '何もせずに終了する筈。 End Sub ------------------------------------------------- ENDステートメントの直前で、何か実行する必要があるのかと思い、下記のようにも試してみました。 1)ToolBarを非表示にする。 Toolbar1.Visible = False 又は Set ToolBar1 = Nothing END  '何もせずに終了する筈。 結果:ツールバーが非表示になるだけで、メインMDIフォームは表示されます。 2)メインMDIフォームを無効にする。 MDIForm1.Enabled = False END  '何もせずに終了する筈。 結果:我ながらマヌケですが、メインMDIフォームが表示され、尚かつ×印すらクリック不可でした。 3)メインMDIフォームを非表示にする。 MDIForm1.Visible = False END  '何もせずに終了する筈。 結果:MDIフォームが非表示となり、一見、よさそうですが、タスクマネージャで確認すると、該当アプリのタスクは終了はしていませんでした。 その他、ENDの代わりに、STOPを使用してみました。 この場合は、STOP実行時に「STOPステートメントで中断しました」とのメッセージが表示され、OKボタンで、やはりメインMDIフォームが表示されます。 どなたか、MDIフォーム+ToolBarコントロールを組み込んだ状態で、正常にENDステートメントを動作させる方法を教えてください。(EXEでの動作です。) また、VBでデバッグさせている状態だと問題無く終了するのは何故なのでしょうか?。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Initializeイベントで Me.TooBar1.Enabled = False を実行しておきます こうしておけば MDIフォームのLoadイベントでEndステートメントも実行されるようです ツールバーの初期化が関係しているのかもしれませんね

khide1202
質問者

お礼

お礼が遅くなってしまい、申し訳ないです。 redfox63さん ありがとうございました。 Initializeイベントで Me.TooBar1.Enabled = False とし、フォームの初期化時にツールバーを無効化することで解決できました。 ただ、このままですとツールバーが無効のままですので、 さらに、Activateイベントで下記のように有効に戻すようにしました。 Private Sub MDIForm_Activate() Toolbar1.Enabled = True End Sub 本当にありがとうございました。

関連するQ&A

  • VB6でEndステートメントに変わる方法

    VB6を使っております。 Endコマンドを使わずに、Unloadイベントで開いているフォームを閉じていく処理にするのが、定跡とされていますが、OnErrorGotoで飛んだ先でResume Nextではなくて、終了させたい場合は、私はENDステートメントを使っておりますが、 Unload meでイベントを発生させても エラー時には終了できません。 Endステートメントに変わる方法で終了させることは可能でしょうか?

  • exeだけで、CommonDialogのような動作

    CommonDialogコントロールを使わずに、VbのexeファイルだけでCommonDialogのような動作を実現する方法はありますか? CommonDialogを使いますとインストーラーで配布しないといけなくなるので、exeファイルだけで実行できるようにしたいと言う目的です。

  • VB.NETとEXE

    VB.NETで作成したフォーム(仮にメインフォームとします)にコマンドボタンを複数貼り付けています。 各コマンドボタンをクリックすると、それぞれの別のEXEが起動します。 (例 コマンドAをクリックすると、EXE-Aが起動、コマンドBをクリックするとEXE-Bが起動。両方一度に起動も可) この時、必ずメインフォームの上にEXEのフォームが重なるように表示されています。 そこで質問があります。 1、複数EXEが起動されている時、一番前面に表示されているEXEを識別する方法はありますか? 「現在アクティブなEXE」とは異なります。なぜなら、メインフォームをクリックすると、前面に表示されているEXEはアクティブな状態とはならないためです。 2、メインのフォームの右上にある「最大化」や「最小化」のボタンをクリックしたら、それに連動してEXEも最大化や最小化をするようにすることは可能でしょうか? すこしわかりにくいと思いますが、補足もしますので、アドバイスよろしくお願いします。

  • vb.netで作成したexeファイルが実行できない

    vb.netのexeファイルでのアプリの一部の動作ができません。 プロジェクトファイルを開いて実行すれば稼動するのですが、生成したexeファイルを実行した場合に一部の動作が稼働できません。その動作以外の動作は稼働します。 その稼働しない動作はデバイスの状態変更(有効から無効)にする動作です。 原因が分かる方、推測できる方がいらっしゃったら、教えていただけないでしょうか? 宜しくお願いします。 exeファイルは監視exeでデバイスの接続時にフォームが表示するようにタスクスケジューラーで常時監視をしています。 また、通常時は画面上には見えないように「ShowInTaskbar」をFalseにしており、フォームは通常時最小化されている状態になります。

  • vb製EXEが終了しない

    XPでVB6.0のアプリを作っているのですが、unloadや×ボタンで終了しなくなってしまいました。 Form_Unloadにブレークを貼って調べようとしたのですが、ブレークで止まるのですが、そこからIDEの操作が全くできなくなります。 タスクバーでIDEを右クリックし、閉じる(C)を選ぶと終了します。 また、EndステートメントをForm_Unloadに書くと終了します。ただし、EndステートメントだとIDEも終了してしまいます。 終了しなくなった原因ってなんなんでしょうか。

  • フォームの操作について

    現在、VB2010で、MDIフォームに、MDI子フォームを表示させた状態で、通常のフォームを開いています。 このとき、MDI子フォームにフォーカスが移らないようにしたいのですが 方法が分かりません。 よろしくお願いします。

  • メニューバーの使用可不可の

    初めて投稿いいたします。VB初心者です。 VB6.0(SP6)で、ちょっとしたテストアプリを作成中です。 メインフォーム(MDI)のメニューバーとツールバーコントロールの使用可能(不可)を切り替える方法を教えてください。 子フォームのボタンをクリックした際、内部処理実行中に、上記コントロールを一時的に使用不可とさせたい次第です。 現状は、下記のような方法で実現させていますが、あまりスマートな方法とは言えないように思います。 -----禁止させる場合-------------------------------- Private Sub CommandDisable_Click() 'メニューバー禁止 MDIForm1.mnuFile.Enabled = False   'ツールバーボタン禁止 MDIForm1.Toolbar1.Buttons(1).Enabled = False End Sub -------------------------------------------------- -----禁止を解除させる場合-------------------------- Private Sub CommandEnable_Click() 'メニューバー禁止 MDIForm1.mnuFile.Enabled = True   'ツールバーボタン禁止 MDIForm1.Toolbar1.Buttons(1).Enabled = True End Sub -------------------------------------------------- 上記の方法で、メニューバーまたはツールバーともにグレイ表記となり、割り当てた機能が呼び出されることを防ぐことは実現出来ています。 しかし、メニューバー、ボタンともに、クリックだけは出来てしまいます。 どなたか、クリックも含めて、使用不可とさせる方法を教えてください。 よろしくお願いします。

  • VB2005のMDIについて

    はじめまして。現在、VB2005で開発しております。 MDIの操作で判らないところがありますので、ご存知の方がいましたら、教えてください。 MDIで開発しております。親フォームで発生したイベント内で子フォームに対してコントロール操作(画面を操作する関数を実行)を行うのですが、画面は全く動作しません。 ※デバックで確認するとコントロール操作しております。 対象の子フォームは必ず表示されていますが、必ずしも最前面にはいません。 今回のように親フォームから子フォームのメソッドを実行する際に動作する方法を教えてください。それとも、操作することは不可なのでしょうか。宜しくお願いします。

  • ActiveXコントロールの作成(VB6)

    こんばんは。 今、VB6でActiveXコントロールを作成しようと思っています。 現在、標準EXEにて、プログラムが作ってあります。 動作としては、 1.スタートボタン(CmdStart)で開始 2.処理(外部の測定器によるデータ収集) 3.終了ボタン(CmdEnd)にてプログラム終了 です。 これをもとに、ActiveXコントロールを作成したいです。手元にある文献にしたがってほぼコピー&ペーストで作成しました。また、これの動作を調べるため、標準EXEのフォームを作成し、そのフォームにActiveXコントロールを貼り付けました。 ここで質問です。 Form_LoadはUserControl_Initializeに書き換えました。(これは文献に載っていました) 最後のプログラム終了がうまくいきません。 標準EXEでは Private Sub CmdEnd_Click() Unload Me End Sub と書いてプログラムを終了させていました。 ここを書き換えずにActiveXコントロールを実行させたらエラーが出ました。"Unload Me"を"End"に書き換えてみたら、サポートされていないと出ました。 CmdEndをクリックしてプログラムを終了させるにはどう書けばいいでしょうか? よろしくお願いします。

  • MDIフォームとユーザコントロール

    VB.Netでの質問です。 ウィンドウメッセージを受け取りイベントを起こすユーザーコントロールクラス Class UserCtl Private Event MyKeyDown() Private Sub UserCtl_KeyDown() as Handels MyBase.KeyDown RaiseEvent MyKeyDown End Sub End Class プロセスA MDI子フォームにユーザーコントロールを追加し、子フォームにて、UserCtl.MyKeyDownイベントプロシージャでユーザーコントロールがウィンドウメッセージを受け取ったと認識し処理をします。 MDI子フォームはMDI親フォームより、CloseメソッドでしかCloseしません。 プロセスB FindWindowでMDI親フォーム, FindWindowExでMDI子フォーム、ユーザーコントロールハンドルを確認した上で、ユーザーコントロールにウィンドウメッセージをPostMessageします。 質問1 プロセスBからハンドルを探していますが、ウィンドウハンドル,ユーザーコントロールハンドルはいつまで有効なハンドルなのでしょうか? Closeでしょうか、それとも、Disposeでしょうか? 質問2 MDI親フォームでMDI子フォームをCloseした後でも、UserCtl.MyKeyDownは発生できるものなのでしょうか? 質問3 ユーザーコントロールで親フォーム(MDI子フォーム)がCloseされた事を認識する方法はないでしょうか? Me.Parent.IsDisposeでできるかなぁと考えているのですが。 よろしくお願いいたします。