投稿時間:2004/05/10(Mon) 17:22 投稿者名:やまめ
URL :
タイトル:Enterによるフォーカスの移動
初めて投稿いたします。よろしくお願いします。
技術資料にある以下の方法で、Enterによるフォーカス移動を実現させようとしたところ、 以下のようなエラーが発生するのですが、原因が良く分かりません。 どなたかお分かりになれば、お教えください。
1.採用した手法 サポート技術情報にあった以下の方法に、 Form_KeyDownイベントにて、Enterキーを検出、setnextを呼び出すようにし、 マウスによるコントロールの選択を考慮し、 各コントロールのgotForcusにて、curCtrl変数の値を更新するようにしました。 複数のフォームにこの処置をしました。
'NumCtrlはEnterキーで移動したいコントロールの数 Const NumCtrl = 3 Dim Ctrl(NumCtrl - 1) As Control
Private Sub SetNext() '次のコントロールへの移動ルーチン Static CurCtrl As Integer CurCtrl = CurCtrl + 1 If CurCtrl = NumCtrl Then CurCtrl = 0 Ctrl(CurCtrl).SetFocus End Sub
Private Sub Form_Load() 'あらかじめ移動したいコントロールを配列変数CtrlにSetしておきます ' 'ControlsコレクションとTabIndexプロパティを用いてループで記述する 'ことも可能ですが、ソートが必要になるので、ここでは単純な方法を '用いています。 Set Ctrl(0) = Text1(0) Set Ctrl(1) = Text1(1) Set Ctrl(2) = Combo1 End Sub
2.不具合1 フォームをload/UnLoad、再度loadすると、フォーム上のコントロールを参照しようとすると 「オブジェクトがない」との実行時エラー発生。 from_loadでブレイクし、コントロールの値を表示させながら、ステップ実行したところ、 Set Ctrl(0) = Text1(0) Set Ctrl(1) = Text1(1) Set Ctrl(2) = Combo1 の実行にて、2度目のload時のみ、順にオブジェクトが消えていくことが確認できた。
3.不具合2 そこで、各フォームのunloadイベントに以下を追加。 Private Sub Form_unLoad() Set Ctrl(0) = nothing Set Ctrl(1) = nothing Set Ctrl(2) = nothing End Sub
これにより、2項のエラー発生せず、繰り返しload/UnLoadが実施できるようになった。
が、ひとつのフォームのみ(もっとも使用しているコントロールの多いもの。といっても60個程度)、 Set Ctrl(0) = Text1(0) の実行前、from_loadすると同時にオブジェクトが消えてしまった。
4.結果 現状、3項のエラーの発生するフォームのみ、力ずく(各コントロールのkeydownイベント)で フォーカスの移動を実現しています。 他のフォームもたまたま上手く動いているだけのような状態なので、心配です。
よろしくおねがいします。
|