VB6を利用し、同一キーで異なる操作を行う方法を探しています。
TextBoxを複数横並びに配置し、Enter、右矢印を押した場合に次のTextBoxへフォーカスを移動し、
左矢印を押した場合には前のTextBoxへフォーカスが移動するようにしています。
教えて頂きたい操作は
TextBoxの内容が空欄の場合には現状と動作と同様に左右キー、Enterでフォーカス移動としたいのですが、
フォーカスがあるTextBoxに内容が入力されてる場合に限り、左右キーでTextBox内の内容にカーソルが移動して編集が行えるようにしたいと考えています。
現状では上下矢印でフォーカスがあるTextBox内のカーソルを移動することが可能ですが、
左右キーで操作できるはずと言われてしまい、調べてはいるのですが知識不足により対応に困っております。
宜しくお願い致します
Key入力処理が書いてある、TextBoxのKeyDownイベントの最初の行に、
If Text(Index).Text <> "" Then Exit Sub
を入れるだけで良いのでは。
我龍院さん
返信ありがとうございます。
If Text(Index).Text <> "" Then Exit Sub を入れることでTextが空欄以外の場合には
Exit Subとなり左右でカーソル移動が可能ですが、当然他のKeyDownイベントが実行されません。
入力または修正後はEnterや矢印でLostFocusすることを望ましいらしいのです。
今はTextBox内でカーソルが両サイドのある場合の情報を取得してなんとかできる
物なのか調べています。
何かよい方法をご存知でしたら教えていただけますと助かります。
宜しくお願い致します
>If Text(Index).Text <> "" Then Exit Sub を入れることでTextが空欄以外の場合には
>Exit Subとなり左右でカーソル移動が可能ですが、当然他のKeyDownイベントが実行されません。
は?それって条件が『Textが空欄』ていうだけの判断でなくて、
『Textが空欄』でかつ『左右のキーが押されたとき』って条件を加えるだけの話では???
>今はTextBox内でカーソルが両サイドのある場合の情報を取得してなんとかできる
>物なのか調べています。
日本語が変なので意味が分からないけど、カーソル位置と、テキストの文字数と、
選択されている文字列の長さなら、プロパティを利用すれば分かるのでは?
『入力または修正後は』と書いてありますが、どのようにそれを判断しますか?
入力している本人しか判らないのでは。
>何かよい方法をご存知でしたら教えていただけますと助かります。
通常は矢印で移動するのではなくTABを使います。
Returnに関しては、TextBoxがMultiLineで無かったら、上の条件から除外すれば
いいですよね。
特攻隊長まるるうさん、我龍院さん、ご回答ありがとうございます。
まだ文章が分かりにくいかもしれませんが、動作の流れと現在検討している点を記入します。
(1)TextBoxを複数横並びに配置し、Enter、右矢印を押した場合に次のTextBoxへFocusを移動し、
左矢印を押した場合には1つ前のTextBoxへフォーカスが移動するようにしています。
(2)TextBoxに何か入力されている場合にはFocus移動ではなく入力欄内のカーソル移動とします。
(3)TextBox内でカーソル移動を利用して内容修正後にも左右の矢印とEnterでFocus移動を行いたい
我龍院さんに教えて頂いた
If Text(Index).Text <> "" Then Exit Sub を別のKeyDownイベントの前に入れることで(2)を行うことができます。
(3)を行う為の判断として入力内容が"あいうえお"だった場合、"あ"の前にカーソルがあり、左矢印を押した場合には1つ前のTextBoxへFocusを移動し、"お"の後ろにカーソルある場合に右矢印またはEnterを押した場合には次のTextBoxへFocusを移動できればいいのかなと思いました。
その為、カーソル位置の情報が取得可能であれば文字数をカウントして操作が可能ではないかと考えた次第です。
SelStart プロパティを使用して何とかなりそうです。
ありがとうございました。
ツイート | ![]() |