- ベストアンサー
ActiveControlと入力
何時もお世話になっています。 複数のTextBoxとButtonがあります。 Buttonを押した時に直前までフォーカスのあったTextBoxにButtonに割り当てていた文字が入る様にしたいのですがどの様にしたら良いでしょうか? 各ButtonにMouseMoveイベントを設定し、カーソルがButton上に来るとActiveControlでフォーカスのあるTextBoxで取得・・・まで考えたのですが、この後TextBoxにButtonに割り当てた文字の入力が出来ないのです。 アドバイス、よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
開発環境なんでしょうか? ちなみに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 私が良く使うロジックです。 もっと良い方法があるかもしれませんが…
その他の回答 (1)
それぞれのテキストボックスにカーソルが移動すると対応する図をフォームの一部に表示する手法を応用できそうです。 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 を利用します。 サンプルでは、消してから書いています。 *実用的には問題ないと思います。
お礼
s huskyさん、アドバイスありがとうございます。 参考にさせて頂きます。
お礼
dbrさんアドバイスありがとうございます。 無事希望通りの結果を得る事が出来ました。