- - PR -
TextBoxにフォーカスがあるとき、ButtonをクリックしたらTextBoxのフォーカスを取得できるようにしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-21 16:02
VB2005です。
TextBox1・2・3 とButton1があります。 TextBoxにフォーカスがあるときButtonをクリックしたら TextBoxのフォーカスを取得できるようにしたいのですがどうもよくわかりません。 Button1_Clickのイベントハンドラ内に次のコードを書いているのですが
この状態でButton1をクリックしても「現在選択されているコントロールは、Button1です。」となります。 どのTextBoxにフォーカスを移しても、Button1をクリックした段階でButton1にフォーカスが移る、という事なのでしょうが・・・ TextBox_EnterとTextBox_Leaveのイベントハンドラをうまく使うべきなのだとは思いますが TextBox1_Enterのイベント内に TextBox1.Focus() の一文を書いても Button1をクリックすると結局フォーカスはButton1に移ってしまいます。 初心者質問で申し訳ありませんがどなたかよろしくお願いします。 | ||||
|
投稿日時: 2007-12-21 16:13
TextBox1_EnterじゃなくてTextBox_Leaveに書けばとりあえずは期待した動きになるのでは?
| ||||
|
投稿日時: 2007-12-21 16:23
すみません書くのを忘れていました。 すべてのTextBox_Leaveに TextBox1.Focus() (と2・3)を書いて試してみましたが 確かに取得はできるのですが、今度は別のTextBoxにフォーカスを移動させようとしても、移動ができなくなりました。 もしかしてこの状態からTabキーを押したらフォーカスを移動させたり、マウスでクリックしたらフォーカスを移動させるような記述をするものなのですか? [ メッセージ編集済み 編集者: 未記入 編集日時 2007-12-21 16:24 ] | ||||
|
投稿日時: 2007-12-21 16:26
最終的にやりたいことは
・ボタンを押しても入力コントロールのフォーカスを維持したい。(テキストボックス、コンボボックス等) ・入力コントロール間のフォーカスは自由に移動したい。 ってことでしょうか? なら、TextBox等のLeaveで、フォーカスのあったコントロールほ保存しておき。 ボタンがクリックされたら、そのコントロールにフォーカスを設定してあげるとか。 | ||||
|
投稿日時: 2007-12-21 16:33
基本的な考え方は以下のような感じです。
ただコントロールが増えると、全ての入力コントロールのイベントハンドラを書くのは面倒なんで、 AddHandlerを使って処理を共通化したほうがいいと思います。
| ||||
|
投稿日時: 2007-12-21 16:38
ボタンを押す前にどこにいたのか、ということを知りたいだけなら
Private _PrevControl As Control で、各テキストボックスに TextBoxX_Enter → _PrevControl = TextBoxX その他のコントロールに その他Control_Enter → _PrevControl = Nothing とか。 #すべてを網羅しないといけないのがつらい。 #ハンドラを集約するのもそこそこ大変かな。 #KeyPreviewみたいにEnterPreviewとかあればいいのにね。。。 | ||||
|
投稿日時: 2007-12-21 16:42
[ メッセージ編集済み 編集者: 未記入 編集日時 2007-12-21 16:43 ] | ||||
|
投稿日時: 2007-12-21 16:54
まさしくその通りです。 burton999さん、まどかさん 先ほどburton999さんが提示してくれたコードで無事期待通りの動きができました。 実際の業務では確かにコントロールは増えますので、処理を共通化するためAddHandlerについてはまた調べてみます。 ありがとうございました。 |