環境は VB6.0 SP4 です。
スプレッドコントロールについての質問です。
①スプレッドの左端(何もない場所)をクリック
②行にいるときにボタンを押す
①と②いずれかの場合に別フォームを呼び出しています。(同じ処理です)
別フォームを開きそのフォームを閉じてメインのフォームへ戻ってきたときに、
フォームは見た目はアクティブになってるのですが(タイトルバーが青色)、①の時だけは一度フォームのどこかをクリックしないとアクティブになりません。(見た目はアクティブ?)
別フォームを閉じて戻ってきたときにSetFocusやAPI等を使って、フォームをアクティブにしているのですが、だめでした。
どうしてでしょうか?
「アクティブ」と「最前面」に表示は別です。
下記とかでは ダメなのでしょうか?
'** サブフォームのボタン押下イベント
Private Sub BtnMenuFrm_Click()
'** サブフォームを隠す
Me.Hide
'** メインフォームを表示する
FrmMain.Show
End Sub
>「アクティブ」と「最前面」に表示は別です。
これはどういったことでしょうか?
>下記とかでは ダメなのでしょうか?
>
>'** サブフォームのボタン押下イベント
>Private Sub BtnMenuFrm_Click()
> '** サブフォームを隠す
> Me.Hide
> '** メインフォームを表示する
> FrmMain.Show
>End Sub
このようにしていますが、①の時はだめです。
①のスプレッドの左端というのは
■■■■■■■■
■□□□□□□□ 1行目
■□□□□□□□ 2行目
■□□□□□□□ 3行目
■□□□□□□□ 4行目
の行の黒いところのことです。
↑白いところです。(送信したら色が反転した。)
>>「アクティブ」と「最前面」に表示は別です。
>これはどういったことでしょうか?
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等を使って、
>フォームをアクティブにしているのですが、だめでした。
こういった現象の場合『アクティブにならない』という結果を
受けて『何かが』悪いんだろうけど、強制的にアクティブにする
…というのではなく、アクティブにならない原因を追求して
その原因を取り除けないか?検討するのが正攻法です。
スプレッドのイベントか何かが邪魔してるんじゃないですか?。
>スプレッドのイベントか何かが邪魔してるんじゃないですか?。
試しにスプレッドのイベントを一つだけにして、やってみました。
Private Sub SprData_Click(ByVal Col As Long, ByVal Row As Long)
F_SubForm.Show vbModal, Me
End Sub
これだけでも、①の場合は一度別の場所をクリックしないと、反応がありません。
vbModelessでひらくと大丈夫です。F_SubFormにはボタンを一つおいてそのボタンのイベントに Unload Me だけ書いています。
>F_SubFormにはボタンを一つおいて
>そのボタンのイベントに Unload Me だけ書いています。
Unload Me
行の下に
メインフォーム.Show
を追加で如何でしょうか?
>>スプレッドのイベントか何かが邪魔してるんじゃないですか?。
>試しにスプレッドのイベントを一つだけにして、やってみました。
いや、それ無理だから(^^;)コードが書かれてるイベントが一つ
になっただけで、イベントは起こってるし、それに伴うOS側の
処理は健在でしょ?。そーゆー解釈するならボクの書き込みは
あんまり意味無いかな…。忘れてくださいな。
>いや、それ無理だから(^^;)コードが書かれてるイベントが一つ
>になっただけで、イベントは起こってるし、それに伴うOS側の
>処理は健在でしょ?。そーゆー解釈するならボクの書き込みは
>あんまり意味無いかな…。忘れてくださいな。
イベントは起こっているというのは、どういうことですか?
>イベントは起こっているというのは、どういうことですか?
そのまま。起こっているから起こってる。イベントはコントロール
(今回の場合はスプレッド)が自分で起こすものでフォーム側で
どうにかできるものではないです。ちなみに SprData_Click は
正確に言えばイベントではなく、イベントプロシージャ。イベントが
起こった時に実行される関数で、イベントそのものではないです。
ただのプロシージャだからコード上からも普通の自作関数と
同じように呼べます。
自分でイベントを発生させるユーザコントロールを作れば分かるかも?
分からなければヘルプでイベントがどういうものか調べて下さい。
キーワードは書いてあります。調べずに質問や回答しても全く
見当外れの方向に行ってしまいますよ?。
>自分でイベントを発生させるユーザコントロールを作れば分かるかも?
勉強不足ですので、いろいろとやってみたいと思います。
ありがとうございました。
ツイート | ![]() |