VB6.0(SP5) WinXP(SP2)でデータ入力画面を作っています。
テキストボックス(text1)でダブルクリックすると
入力候補が別フォームで表示されます。
このサブ画面を閉じた際にカーソルを元のテキストボックスに当てたいのですが
別のコントロール(VSFlexGrid)に飛んでいってしまいます。
ダブルクリックの処理が終わった後でグリッドのGotFocusが
発生している様なのですが、サブ画面を出してカーソルを元の位置に戻す。
という処理の部分にブレイクポイントを設置したりすると起きず
何もせずに処理を流すと発生します。
グリッドのTabStopをFalseにしたところ別のTabStop = Trueの
コントロールにカーソルが飛んだのですが
Tab移動は顧客の要望なので外すわけにもいきません。
何がどうなっているのかわからないので要点を得ない説明でしたら申し訳ありません。
必要な情報をご指摘いただけたら補足しますので
アドバイスを宜しくお願いします。
フォームのActiveイベント等に「別のコントロール」にフォーカスを当てる処理があるとか・・・、と考えました。
再度調べてみてください。
SSYさんありがとうございます。
「別のコントロール」にフォーカスを当てる処理をしている全てに
ブレークポイントを設置してみましたがどれもヒットしませんでした。。。
(FlexGrid.Setfocus にブレークポイントを設置して処理実行しました)
もしやり方が間違っていましたらご指摘下さい。
サブ画面のUnloadイベントに、テキストボックスにフォーカスを与えるコードを入れておけばいいのでは?
Private Sub Form_Unload(Cancel As Integer)
Form1.Text1.SetFocus
End Sub
プルランさんありがとうございます。
サブ画面は他のテキストボックスからもダブルクリックで表示され
どのテキストボックスから呼び出されたかにより表示内容を変えている為
サブ画面にフォーカスを与える処理を入れることはできないのです。。。
また他のプログラムでもこのサブ画面のフォームを共有して使っています。
共有フォームなので何を表示するかを示す引数は渡しますが
テキストボックスの名前ではないので利用することはできず
引数の数を変えると全てのプログラムを直さなくてはなりません。
改めて今こうして状況を書いていて気づいたのですが、
他の箇所ではこの現象は発生しないので処理ではなくText1が悪いのかも。
と思って確認してみたところText1自身のTabStopがFalseでした。
そこでTabStopをTrueにしたところうまく動きました。
しかし、Text1はTab移動させないで欲しいというのも顧客の要望なので
Text1のTabStopをTrueにするわけにはいきません。。。
前進したようなしてないような。。。
TabStopをTrueにしつつTabでフォーカスを当てないなどということは
可能なのでしょうか。。。?
最初のタイトルと内容が違ってきてしまっているので
別に質問を立てた方が良いようでしたらご指摘ください。
こちらは解決として別に質問を立てようと思います。
これでは駄目でしょうか?
Private Sub Text1_DblClick()
Text1.TabStop = True
Form2.Show vbModal
End Sub
Private Sub Text1_GotFocus()
Text1.TabStop = False
End Sub
まさやんさんありがとうございます。
お返事が遅くなってしまって申し訳ありません。
まさやんさんに教えていただいた方法でうまくいきました!
すごく難しいことをしなくてはいけないと思いこんでいたのに
こんな初歩的なPGで解決できるなんてコロンブスの卵な気分と同時に
かなり恥ずかしい気持ちでいっぱいです。。。
こういう柔軟な(?)発想の転換が必要なんですね。。。
もっと精進したいと思います。
SSYさん、プルランさんのアドバイスに更に状況を説明することで
最終的に解決案を頂くことができました。
合わせてお礼を申し上げたいと思います。
みなさん、本当にありがとうございました。
ツイート | ![]() |