• ベストアンサー

ActiveControlと入力

何時もお世話になっています。 複数のTextBoxとButtonがあります。 Buttonを押した時に直前までフォーカスのあったTextBoxにButtonに割り当てていた文字が入る様にしたいのですがどの様にしたら良いでしょうか? 各ButtonにMouseMoveイベントを設定し、カーソルがButton上に来るとActiveControlでフォーカスのあるTextBoxで取得・・・まで考えたのですが、この後TextBoxにButtonに割り当てた文字の入力が出来ないのです。 アドバイス、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • bdr
  • ベストアンサー率43% (35/80)
回答No.1

開発環境なんでしょうか? ちなみに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 私が良く使うロジックです。 もっと良い方法があるかもしれませんが…

yurinchi
質問者

お礼

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

その他の回答 (1)

noname#22222
noname#22222
回答No.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 を利用します。 サンプルでは、消してから書いています。 *実用的には問題ないと思います。

yurinchi
質問者

お礼

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

関連するQ&A