フォームをアクティブにするには?

解決


m  2005-05-23 17:18:23  No: 89981  IP: [192.*.*.*]

環境は VB6.0 SP4 です。

スプレッドコントロールについての質問です。

①スプレッドの左端(何もない場所)をクリック
②行にいるときにボタンを押す

①と②いずれかの場合に別フォームを呼び出しています。(同じ処理です)

別フォームを開きそのフォームを閉じてメインのフォームへ戻ってきたときに、
フォームは見た目はアクティブになってるのですが(タイトルバーが青色)、①の時だけは一度フォームのどこかをクリックしないとアクティブになりません。(見た目はアクティブ?)
別フォームを閉じて戻ってきたときにSetFocusやAPI等を使って、フォームをアクティブにしているのですが、だめでした。
どうしてでしょうか?

編集 削除
じゃんぬねっと  URL  2005-05-23 17:25:17  No: 89982  IP: [192.*.*.*]

「アクティブ」と「最前面」に表示は別です。

編集 削除
Take  2005-05-23 17:45:47  No: 89983  IP: [192.*.*.*]

下記とかでは ダメなのでしょうか?

'** サブフォームのボタン押下イベント
Private Sub BtnMenuFrm_Click()
    '** サブフォームを隠す
    Me.Hide
    '** メインフォームを表示する
    FrmMain.Show
End Sub

編集 削除
m  2005-05-23 17:59:25  No: 89984  IP: [192.*.*.*]

>「アクティブ」と「最前面」に表示は別です。
これはどういったことでしょうか?

>下記とかでは ダメなのでしょうか?
>
>'** サブフォームのボタン押下イベント
>Private Sub BtnMenuFrm_Click()
>    '** サブフォームを隠す
>    Me.Hide
>    '** メインフォームを表示する
>    FrmMain.Show
>End Sub
このようにしていますが、①の時はだめです。

編集 削除
m  2005-05-23 18:05:41  No: 89985  IP: [192.*.*.*]

①のスプレッドの左端というのは

■■■■■■■■
■□□□□□□□    1行目
■□□□□□□□    2行目
■□□□□□□□    3行目
■□□□□□□□    4行目

の行の黒いところのことです。

編集 削除
m  2005-05-23 18:06:47  No: 89986  IP: [192.*.*.*]

↑白いところです。(送信したら色が反転した。)

編集 削除
特攻隊長まるるう  2005-05-23 18:14:24  No: 89987  IP: [192.*.*.*]

>>「アクティブ」と「最前面」に表示は別です。
>これはどういったことでしょうか?
http://www.google.com/search?hl=ja&q=%E3%83%95%E3%82%A9%E3%82%A2%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89%E3%82%A6%E3%82%A3%E3%83%B3%E3%83%89%E3%82%A6&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=

>別フォームを閉じて戻ってきたときにSetFocusやAPI等を使って、
>フォームをアクティブにしているのですが、だめでした。
こういった現象の場合『アクティブにならない』という結果を
受けて『何かが』悪いんだろうけど、強制的にアクティブにする
…というのではなく、アクティブにならない原因を追求して
その原因を取り除けないか?検討するのが正攻法です。

スプレッドのイベントか何かが邪魔してるんじゃないですか?。

編集 削除
m  2005-05-23 18:30:13  No: 89988  IP: [192.*.*.*]

>スプレッドのイベントか何かが邪魔してるんじゃないですか?。
試しにスプレッドのイベントを一つだけにして、やってみました。

Private Sub SprData_Click(ByVal Col As Long, ByVal Row As Long)
    F_SubForm.Show vbModal, Me
End Sub

これだけでも、①の場合は一度別の場所をクリックしないと、反応がありません。
vbModelessでひらくと大丈夫です。F_SubFormにはボタンを一つおいてそのボタンのイベントに Unload Me だけ書いています。

編集 削除
Take  2005-05-23 18:39:50  No: 89989  IP: [192.*.*.*]

>F_SubFormにはボタンを一つおいて
>そのボタンのイベントに Unload Me だけ書いています。
  Unload Me
行の下に
  メインフォーム.Show
を追加で如何でしょうか?

編集 削除
特攻隊長まるるう  2005-05-23 18:48:02  No: 89990  IP: [192.*.*.*]

>>スプレッドのイベントか何かが邪魔してるんじゃないですか?。
>試しにスプレッドのイベントを一つだけにして、やってみました。
いや、それ無理だから(^^;)コードが書かれてるイベントが一つ
になっただけで、イベントは起こってるし、それに伴うOS側の
処理は健在でしょ?。そーゆー解釈するならボクの書き込みは
あんまり意味無いかな…。忘れてくださいな。

編集 削除
m  2005-05-24 09:19:15  No: 89991  IP: [192.*.*.*]

>いや、それ無理だから(^^;)コードが書かれてるイベントが一つ
>になっただけで、イベントは起こってるし、それに伴うOS側の
>処理は健在でしょ?。そーゆー解釈するならボクの書き込みは
>あんまり意味無いかな…。忘れてくださいな。
イベントは起こっているというのは、どういうことですか?

編集 削除
特攻隊長まるるう  2005-05-24 10:32:37  No: 89992  IP: [192.*.*.*]

>イベントは起こっているというのは、どういうことですか?
そのまま。起こっているから起こってる。イベントはコントロール
(今回の場合はスプレッド)が自分で起こすものでフォーム側で
どうにかできるものではないです。ちなみに SprData_Click は
正確に言えばイベントではなく、イベントプロシージャ。イベントが
起こった時に実行される関数で、イベントそのものではないです。
ただのプロシージャだからコード上からも普通の自作関数と
同じように呼べます。
自分でイベントを発生させるユーザコントロールを作れば分かるかも?
分からなければヘルプでイベントがどういうものか調べて下さい。

キーワードは書いてあります。調べずに質問や回答しても全く
見当外れの方向に行ってしまいますよ?。

編集 削除
m  2005-05-24 10:41:52  No: 89993  IP: [192.*.*.*]

>自分でイベントを発生させるユーザコントロールを作れば分かるかも?
勉強不足ですので、いろいろとやってみたいと思います。
ありがとうございました。

編集 削除