[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/02/23(Thu) 13:34
投稿者名:うみ
Eメール:
URL :http://www.geocities.jp/pentadect/Project1.lzh
タイトル:
同じフォームが二つロードされる。
いつもお世話になっております。

私の開発歴は約半年ですが、その前に1年ほどVBのソースを解読したり
していました。

開発環境はWindowsXp Pro Sp2 + VB6Sp6です

さて、皆様に伺いたいのは
「自作のクラスを利用すると、Form_loadイベントが二回発生することがある。」
ことに対する対処です。

あるFormの上のMsFlexGrid上から色々な操作をするクラスを作りました。
その中にGridの任意のカラム上でEnterキーを押すと、別のFormを呼ぶ
機能をつけました。

元Formも呼び出されるFormもそのクラスが入っています。

Formを普通に開くと特に変なことはおきないのですが、よそのForm
から呼ばれて起動したときだけ、そのクラスの読み込みをForm_Load
イベント内に入れると、読み込み後だいたい0.1秒後くらいにもう
一度最初からForm_Loadイベントが開始されてしまいます。
元のForm_loadイベントも進行します。

しょうがないのでForm_Resizeイベント内に移動してもForm_Resize
イベント内でもう一度Form_Loadが始まります。

この現象の後は元のFormと呼びだされたFormのほかにもう一枚
見えないFormが発生して、呼びだされたFormと元のFormを閉じ
ても、消えません。

F8でトレースしていくと再現するときとしないときがあります。
再現したときは、特に脈絡もなく不意にLoadイベントが発生
しました。

キーイベントが二回発生することがあるのでそのせいかとも
思ったのですが、呼び出されるFormから自作のクラスをはずすと
発生しません。

この問題は必ず発生するわけではなく、呼び出し先のFormに
よっては起きたり、起きなかったりします。
ちなみにforms(i).name=フォーム名で開いているか確認し、unloadすると、
なぜかform_loadでループします。

このクラスを作るのにものすごい時間をかけたので、できれば使いた
いので皆様よろしく御願いします。

hhttp://www.geocities.jp/pentadect/Project1.lzh

にサンプルをあげました。

このサンプルを開くと、F_元が開きカラムが二つあるMsFlexGridが表示されます。

右のカラムをクリックしてエンターすると、F_先が正常に表示されます。
左のカラムをクリックしてエンターすると、F_受注が異常な状態で表示されます。

どなたかお知恵をお貸しください。

※このクラスの制作にはこのサイトのサンプルを参考にさせていただきました。
この場を借りて御礼申し上げます。  

投稿時間:2006/02/23(Thu) 13:53
投稿者名:K.J.K.
Eメール:akiya@koalanet.ne.jp
URL :
タイトル:
Re: 同じフォームが二つロードされる。
単純に、コードのどこかで暗黙のフォームのインスタンスのメソッドを
呼び出していません? 例えば、コードのどこかで、

    Dim sBuffer As String
    sBuffer = Form1.Caption

のようなコードがあれば、Form1.Captionを使った段階でForm1 (As Form1)
がLoadされてしまいますよね。

投稿時間:2006/02/23(Thu) 17:07
投稿者名:うみ
Eメール:
URL :http://www.geocities.jp/pentadect/Project1.lzh
タイトル:
Re^2: 同じフォームが二つロードされる。
> 単純に、コードのどこかで暗黙のフォームのインスタンスのメソッドを
> 呼び出していません? 例えば、コードのどこかで、
>
>     Dim sBuffer As String
>     sBuffer = Form1.Caption
>
> のようなコードがあれば、Form1.Captionを使った段階でForm1 (As Form1)
> がLoadされてしまいますよね。

はい。確認してみます。

投稿時間:2006/02/23(Thu) 17:43
投稿者名:うみ
Eメール:
URL :http://www.geocities.jp/pentadect/Project1.lzh
タイトル:
Re^2: VB6なのに同じフォームが二つロードされる。
> 単純に、コードのどこかで暗黙のフォームのインスタンスのメソッドを
> 呼び出していません? 例えば、コードのどこかで、
>
>     Dim sBuffer As String
>     sBuffer = Form1.Caption
>
> のようなコードがあれば、Form1.Captionを使った段階でForm1 (As Form1)
> がLoadされてしまいますよね。

すいません。おっしゃっているのは
例えば

set newform =form.add("hoge")
newform.show vbmodal

までの間で上記のようなコードを書いていないかと
いうことでよろしいでしょうか?

あと、既にloadされている場合はVB6だとloadしないような
気がするのですが、間違っていますでしょうか?

よくわかっていませんで申し訳ありません。

投稿時間:2006/02/23(Thu) 19:30
投稿者名:うみ
Eメール:
URL :http://www.geocities.jp/pentadect/Project1.lzh
タイトル:
Re^2: 同じフォームが二つロードされる。
> 単純に、コードのどこかで暗黙のフォームのインスタンスのメソッドを
> 呼び出していません? 例えば、コードのどこかで、
>
>     Dim sBuffer As String
>     sBuffer = Form1.Caption
>
> のようなコードがあれば、Form1.Captionを使った段階でForm1 (As Form1)
> がLoadされてしまいますよね。

頓珍漢なレスつけてすいませんでした。
チェックの結果Load, Resize, Activate のどのイベントでも、フォームを
参照した変数のプロパティ、もしくはフォーム自身のプロパティを利用する
とLoadイベントが走りました。
フォーム名の変わりにMeを使うと大丈夫でした。ありがとうございました。
また、フォームを開く際にshowを使ってもだめで、Visible=trueにする必要
がありました。