デバッガが終了しない

解決


タメ子  2007-02-16 23:57:03  No: 135321

FormでUnload Me して画面は消えても、デバッガは終了しません。

Form の Load でINIファイルの処理を入れていますが、①の行を追加すると
デバッガは終了せず、消すと終了します。

ご教授ください。

    If pStrPrintVisible = pcStrProIniErr Then

        pStrPrintVisible = "0"
        Form_ResultList.Toolbar_ResultList.Buttons(3).Visible = False
    Else
        Form_ResultList.Toolbar_ResultList.Buttons(3).Caption = True   ①
    End If


そがっち  2007-02-17 00:21:52  No: 135322

まず始めに…
質問の意図が解りかねます。
デバッガを、終わらせたいんでしょうか?

とりあえず、それが目的と勝手に判断して話を進めますが
(本来なら「デバッガを終了させるにはどうしたらよいか」という旨の
表現が欲しいところです)、①の行で何かエラーが出たりしてません?
Toolbar_ResultList.Buttons(3)というのが何者か
ハッキリとはしませんが、CommandButton(.NETだとButtonか…
でもCaptionプロパティがあるからVB6? 出来れば
書いてほしかったですが)の類として、Captionプロパティに
Boolean(または -1 という「数値」)を入れようとしてますが。
「型が一致しません」エラーが出るか、On Errorで無理矢理
抜けてたとしても、その後どこかで予期せぬ動作が発生したり
してませんか?


タメ子  2007-02-17 00:52:46  No: 135323

すみません。パニックになってしまって。
VB6での開発で、1つの画面(Form)を表示し、終了のコマンドボタンでその画面を終了(消す)します。

ここで、①は、
Form_ResultList.Toolbar_ResultList.Buttons(3).Visible = true
の間違いです。すみません。
この①があるかないかで、ある場合は、終了ボタンを押すと、画面は消えて
終了(Unload)しているのですが、デバッガはまだ起動中(終了の■アイコンが有効になった状態)

①を消すと、画面も消えて、デバッガも開始「▲」アイコンが有効になった
状態に戻ります。


魔界の仮面弁士  2007-02-17 01:08:23  No: 135324

フォームの有効期間の管理がおろそかになっているのかも。

Form_ResultList フォームの
  Initialize イベント
  Load イベント
  Unload イベント
  Terminate イベント
の 4 つにブレークポイントを仕掛けておき、どのタイミングで
フォームがロード/アンロードされるのかを追跡してみてください。

> Form_ResultList.Toolbar_ResultList.Buttons(3).Visible = true
もし、Form_ResultList がロードされていない状態で上記が実行されると、
この時点で、Form_ResultList が自動的にロードされます。

Show メソッドや Visible プロパティを操作していないのであれば、
ロードされたフォームは非表示のままですので、それが、アプリが
終了しない原因となっているのでしょう。


そがっち  2007-02-17 01:26:36  No: 135325

ふむふむ……
Toolbar_ResultList.Buttons(3)が「終了ボタン」で、それを押すことは出来て
Formは見えなくなるけど終わらない、って事ですかね?
と なると、状況から察するに、(終了ボタン)_Clickイベントで
実はMe.Hide してるだけで、Unload Me してなかったり?
(Endステートメントで無理矢理終わらせるのも不可では ないですが、
  その場合Form_Unloadイベントが発生しないので注意…知ってるかもですが)
その他の考えられる状況は…ちょっとすぐには思いつかないですね。私は。


タメ子  2007-02-17 01:34:15  No: 135326

ありがとうございます。

> Form_ResultList.Toolbar_ResultList.Buttons(3).Visible = true

この1行が入ると、終了時にTerminate のブレークでとまりません
でした。
はずすとちゃんと入ってきます。
この画面は起動時の画面なので、Show メソッドなどは使用していません。
ここに原因があるのでしょうか?


タメ子  2007-02-17 01:39:32  No: 135327

そがっち様

ありがとうございます。
Toolbar_ResultList.Buttons(3)は、ツールバーにある「印刷」アイコン
で、終了動作とは全く関係ありません。
終了ボタンは別に用意されています。

不思議なのは、このIF文を色々操作(条件を変えるとか)すると、上手く
終了する場合があります。
今、どのときにOKでNGかを見ていますが、色々パターンがあります。

というところからも、この1文に問題があるのではなく、別のところで
C++とか言うところの、メモリリークのようなことを起こしている
って可能性はあるでしょうか?

VBなので、そんなことは考えたこともありませんが・・・

すみません、VBをはじめたばかりで・・・


タメ子  2007-02-17 01:58:35  No: 135328

そがっち様、魔界の仮面弁士
デバッグでTerminate イベントにブレークをはって止まらないことから、
この
>Form_ResultList.Toolbar_ResultList.Buttons(3).Visible = true

で、ブレイクをはりました。
この文は、メイン画面のLoadイベントで用意されているのですが、この時点
で、Form_ResultListはshowされていないので、

<オブジェクト変数または With ブロック変数が設定されていません。>

となっていました。当然ですね。すみません。
INIファイルからデータを読み込む処理に、この処理を入れているのですが、
ここでは、データだけを取り込んで、Form_ResultListのLoadで、値を設定
するよう修正します。

わかりづらい文章と、初歩の初歩的な質問で申し訳ありませんでした。

ありがとうございました。


そがっち  2007-02-17 02:14:13  No: 135329

>わかりづらい文章と、初歩の初歩的な質問で申し訳ありませんでした。

いや、勝手にFormがLoadされてしまう件などは、実際に遭遇するとかしないと
割と気が付きませんからね。
私も、気が付いたのはVB使い始めて結構経ってからでしたしね。

ともかく、現象を端的に表すと「終了ボタンを押しても完全に終了しない
パターンがある」という感じなので、(終了ボタン)_Clickイベント以後の
処理をじっくり追ってみることをオススメします。


そがっち  2007-02-17 02:32:48  No: 135330

あ、確かLoadしていないFormをUnloadしてもエラーには ならなかったような
気がするので、最後の手段としては、
「終了ボタン_Clickイベント内で全Formを盲目的にUnloadする」
…ってのもアリかも?
(あまりオススメは出来ない気がしますが)

何にせよ、Formの事は出来るだけForm内で済ませた方がいいでしょうね。


タメ子  2007-02-17 02:40:39  No: 135331

そがっち様

>何にせよ、Formの事は出来るだけForm内で済ませた方がいいでしょうね。

身にしみました。確かに、別のところですると、上手く行ったとしても、
後々、見にくく、わかり辛いですよね。

ありがとうございました。


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

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






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