プロが教える店舗&オフィスのセキュリティ対策術

Form1からForm2を表示するという処理を以下のようにコーディングしてみました。

**Form1.frm***

Private Sub Command1_Click()
Form1.Hide
Form1.vbModal
Form1.Show
End Sub

**Form2.frm***
Private Sub Command1_Click()
Unlaod Me
End Sub

画面にエクスプローラ等のウィンドウが表示されているときに、Form2を表示させようとすると非アクティブ状態で表示されてしまいます。
また、Form2をUnloadするとForm1が表示されるのですが、その際に、Form1のタイトルと、タスクバーに表示されているボタンが反転した後非アクティブ状態になってしまいます。

フォームは常にアクティブで表示させたいのですが、どうすればよいのでしょうか?

A 回答 (4件)

私の環境ではそのような現象は起きません。


何度も Form1 <-> Form2 をやっても
両フォームともちゃんとアクティブ状態になります。
なので、環境のせいではないでしょうか?
使用しているOS及び、VBのバージョン、サービスパック等は
どのようになっていますか?
最新のサービスパックはあたっていますか?

ちなみに私の環境は以下の通りです。
OS:WinNT4.0 SP6a
VB:Ver6.0 SP5
IE:Ver5.5
    • good
    • 0

多分、Form1をHideした時点で、そのアプリケーションには


画面が一つもない状態になるので、別アプリにフォーカス
が移動してしまいます。
そこからForm2を表示するので、Form2が非アクティブな状
態で表示されてしまうのでしょう。

で、Form1を消すつもりならForm1をModalで表示する必要
はないと思います。

**Form1.frm***
Private Sub Command1_Click()
  Form2.Show vbModeless
  Form1.Hide
End Sub

**Form2.frm***
Private Sub Command1_Click()
  Unload Me
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  Form1.Show
End Sub

で、どうでしょうか?
    • good
    • 0

j_euro ふたたびです。



そいで・・
これ
>From2のUnloadの直前に
>Form1.SetFocus
は、どうでしたか?

つまり、ここを
>>**Form2.frm***
>>Private Sub Command1_Click()
>>Unlaod Me
>>End Sub

こうやる
**Form2.frm***
Private Sub Command1_Click()
Form1.SetFocus
Unlaod Me
End Sub

すなわち
>フォームは常にアクティブ
(「常に前面」じゃなくてね)
のためには、他のフォームが終わるときに、目的のフォームにフォーカスをセットする。
    • good
    • 0

えと、やりたいことと、現状がまだよくわからないので、当てずっぽうなんですけど・・・



From2のUnloadの直前に
Form1.SetFocus
してみたらどう?

これは、

>Private Sub Command1_Click()
>Form1.Hide
>Form1.vbModal
>Form1.Show
>End Sub

こうなのかな?

Private Sub Command1_Click()
Form1.Hide
Form2.Show vbModal
End Sub

当たった?

この回答への補足

すいません。コード書き間違えてました・・・。

Private Sub Command1_Click()
Form1.Hide
Form2.Show vbModal
Form1.Show
End Sub

でした。

補足日時:2001/06/19 17:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A