tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル別formの表示について
記事No14679
投稿日: 2010/05/14(Fri) 18:33
投稿者atroo
環境は VB6 SP6 WindowsXP SP3 です。

MIDフォーム内の子フォームから 子フォームでは無いフォームを 2度表示すると 呼び出したフォームでは無い 同名の子フォームを呼び出してしまいます。

formAでは
   text入力中に コマンドボタンを押すと
   formB.show 1 として foemBを表示させます。 
   formAを Unload するときに unload formB としています。

formBでは
   入力処理後に
   me.visible = False
   formA.text1.SetFocus   としています。

子フォームを 一度起動中 何度でもformBを表示させ処理後には  formA.text1 にフォーカスが戻りますが
いったん formAを Unload した後 再度formA を起動させ formBを 表示させると
今度は 別なformA を起動させてしまいます。 

formBにおいて   formA.text1.SetFocus を外すと 問題ないのですが
formA.text1 にフォーカスが移らないため不都合があります。

ご指導をよろしくお願いいたします。 

[ツリー表示へ]
タイトルRe: 別formの表示について
記事No14681
投稿日: 2010/05/14(Fri) 20:14
投稿者K.J.K.
> 環境は VB6 SP6 WindowsXP SP3 です。

SPは最新のものを当てることを勧めます。

最近だと反応の無い投稿で
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=14668&reno=no&oya=14668&mode=msgview&page=0
がありますが、それとは無関係ですか?

> formAでは
>    text入力中に コマンドボタンを押すと
>    formB.show 1 として foemBを表示させます。 
>    formAを Unload するときに unload formB としています。
>
> formBでは
>    入力処理後に
>    me.visible = False
>    formA.text1.SetFocus   としています。
>
> 子フォームを 一度起動中 何度でもformBを表示させ処理後には  formA.text1 にフォーカスが戻りますが
> いったん formAを Unload した後 再度formA を起動させ formBを 表示させると
> 今度は 別なformA を起動させてしまいます。 

Instance と Class の区別を意識しましょう。

切り分け方はいろいろありますが、例えばFormBの1つのメソッドに押し込める
ならば、単純に、FormB 側に

' 戻り値の型などは適切に変更してください。
Friend Function ShowModal(ByVal Owner As FormA) As Boolean
    Call Me.Show(vbModal)    
    ' ここで戻り値も含む各種処理
    Call Me.Hide
    If Not (Owner Is Nothing) Then Call Owner.Text1.SetFocus
End Function
とでもするとか。複数のメソッドやイベントに分けてもいいですし。

FormA側で対応するのならば、FormB側ではFormAを弄らずに、
    Call FormB.Show(vbModal)
    ' もし条件があるのならばここで分岐しておく。
    Call Text1.SetFocus()
とでもすればいいでしょう。普通はこちらでしょうね。

[ツリー表示へ]
タイトルRe^2: 別formの表示について
記事No14682
投稿日: 2010/05/14(Fri) 22:16
投稿者魔界の仮面弁士
> > MIDフォーム内の子フォームから
MDI かな?


> > 環境は VB6 SP6 WindowsXP SP3 です。
> SPは最新のものを当てることを勧めます。
提示された環境では、最新の Service Pack が適用されているようですね。

[ツリー表示へ]
タイトルRe^2: 別formの表示について
記事No14683
投稿日: 2010/05/15(Sat) 08:29
投稿者atroo
> > 環境は VB6 SP6 WindowsXP SP3 です。
>
> SPは最新のものを当てることを勧めます。
>
はい そうですね。
現在は 両方とも最新です。

> 最近だと反応の無い投稿で
> http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?no=14668&reno=no&oya=14668&mode=msgview&page=0
> がありますが、それとは無関係ですか?
私の環境では問題ないです。


> FormA側で対応するのならば、FormB側ではFormAを弄らずに、
>     Call FormB.Show(vbModal)
>     ' もし条件があるのならばここで分岐しておく。
>     Call Text1.SetFocus()
> とでもすればいいでしょう。普通はこちらでしょうね。

はい こちらの方法でやったところ 問題なく処理ができました。

早速の ご返事ありがとうございます。

[ツリー表示へ]