プロが教えるわが家の防犯対策術!

何時もお世話になっています。

複数のTextBoxとButtonがあります。
Buttonを押した時に直前までフォーカスのあったTextBoxにButtonに割り当てていた文字が入る様にしたいのですがどの様にしたら良いでしょうか?

各ButtonにMouseMoveイベントを設定し、カーソルがButton上に来るとActiveControlでフォーカスのあるTextBoxで取得・・・まで考えたのですが、この後TextBoxにButtonに割り当てた文字の入力が出来ないのです。

アドバイス、よろしくお願い致します。

A 回答 (2件)

それぞれのテキストボックスにカーソルが移動すると対応する図をフォームの一部に表示する手法を応用できそうです。



Option Explicit

Public CurrentCtl As Control

Private Sub Command1_Click()
  CurrentCtl.SetFocus
  SendKeys "^({Left})^(+({Right})){DELETE}", False
  SendKeys Me.Command1.Caption, False
End Sub

Private Sub Timer1_Timer()
On Error Resume Next
  If TypeOf ActiveControl Is TextBox Then
    If CurrentCtl.Name <> ActiveControl.Name Then
      Set CurrentCtl = ActiveControl
    End If
  End If
End Sub

0.01秒等の適当な間隔で CurrentCtl を更新します。
後はボタンが押されたらフォーカスを移動します。
書き換えには、SendKeys を利用します。
サンプルでは、消してから書いています。

*実用的には問題ないと思います。
    • good
    • 0
この回答へのお礼

s huskyさん、アドバイスありがとうございます。
参考にさせて頂きます。

お礼日時:2006/09/22 18:00

開発環境なんでしょうか?


ちなみにVBを前提に回答させていただきます
(1)モジュールレベルでのグローバル変数(contorol)を定義
private cntTextbox as Control '←これのこと
sub XX

end sub

(2)各々のtextboxのフォーカスが外れる(Exitイベント)で(1)で宣言した変数にセットする
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
set cntTextbox=ActiveControl
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
set cntTextbox=ActiveControl
End Sub

(3)各々のbuttonクリック時(Clickイベント)で割り当てた文字を入れる
Private Sub Button1_Click()
cntTextbox.value="ボタン1"
End SubPrivate Sub Button2_Click()
cntTextbox.value="ボタン2"
End Sub

私が良く使うロジックです。
もっと良い方法があるかもしれませんが…
    • good
    • 0
この回答へのお礼

dbrさんアドバイスありがとうございます。
無事希望通りの結果を得る事が出来ました。

お礼日時:2006/09/22 17:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!