- ベストアンサー
VB6.0のHideのバグ?
いつもお世話になっております。 以下の疑問点が出ています。 どなたか答えをご存知の方がおりましたらご回答願います。 [現象] Form1からForm2を呼び出し、Form1をhideしても Form1が隠れない。 [条件] Form1のボタンをクリック後、すぐに何でもいい(フォルダを開いたウィンドウとか)のでウィンドウを最前面に表示してください。 [プログラム] --form1-- Private Sub Command1_Click() On Error GoTo ERROR_END Screen.MousePointer = vbHourglass '請求書作成画面に移行 Form2.Show Screen.MousePointer = vbDefault Exit Sub ERROR_END: Screen.MousePointer = vbDefault MsgBox Error(Err) End Sub Private Sub Form_Load() Me.Show Screen.MousePointer = vbDefault End Sub --form2-- Private Sub Form_Load() Dim i, strsql For i = 0 To 50000000 strsql = "時間稼ぎ" Next Me.Show Form1.Hide Screen.MousePointer = vbDefault End Sub [Form] Form1にコマンドボタンを一つ配置するだけでOKです。 [環境] WinXP SP1 VB6.0 SP6 [その他] WIN98ではこの事象は起こらないと報告受けてます。 バグならばバグと、PGミスならミスと明確に答えていただけると大変助かります。 どうぞよろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VB6.0(SP5)でやってみましたが、いちおう動作しています。ただし・・・ For i = 0 To 50000000 strsql = "時間稼ぎ" Next で1分以上かかります。DoEvents が入っていないので、その間操作が出来ません。 Form1 を非表示にするには、Form1でForm2を表示した後に行っても良いと思います。(Form2でForm1を閉じません) 請求書作成画面に移行 Form2.Show Screen.MousePointer = vbDefault Form1.Hide Exit Sub
その他の回答 (1)
- piyo2000
- ベストアンサー率49% (144/293)
Win2k/6.0Sp5ですが、全く問題ないです(^^; 一応コンパイルしてexeでも試しましたが・・・ 気になることがいくつかあったので。 1.LoadイベントにMe.Showは不要 FormをShowすることでLoadをしているので、不要だと思います。 2.#1さんがおっしゃっている通り、隠すタイミングがForm2の表示直後なのであれば、Form1側でMe.Hideとすべきです。 Form1.Hideとするとややこしくなるので止めたほうが良いですね。もし、Form1がロードされていない(いてはいけない)状況では、このメソッドでインスタンスが作成されてしまいますから。 コードを見る限り「Formの暗黙のインスタンス」についてよく理解されていないように思います。
お礼
ご回答ありがとうございます。 >For i = 0 To 50000000 については根拠のある数値ではありません。 ただ、表示するまでに時間をかけたいから空回ししているだけなので。。。 >その間操作が出来ません については、画面下にあるバーから開いている フォルダを表示していただくだけなので、今の段階では問題ないと考えています。 参考に示していただいたプログラムなのですが、 実際はそのように作成して、この現象が起こってしまったので、分かりやすくするために上記のように展開して掲載させて頂きました。