投稿日 | : 2002/08/19(Mon) 12:35 |
投稿者 | : とろ |
Eメール | : |
URL | : |
タイトル | : Re: アクティブなテキストボックスを取得する方法 |
> (どのフォームのどのコントロールがアクティブになったかを取得したいのですが!)
> サブクラス化して取得する方法があれば教えて頂けないでしょうか?
これじゃダメかしら?
フォームモジュールとクラスモジュールを1つずつ用意して、下記のコードをコピペして、
フォーム上にテキストボックスを適当な数だけ配置して、実行してみて下さい。
注意:コントロール配列が設定されている( Index プロパティに値が入っている)
場合はエラーになります。
'-- フォームモジュール
Option Explicit
Private cTextBox() As clsTextBox
Private Sub Form_Load()
Dim ctrl As Control
Dim iCnt As Integer
iCnt = -1
For Each ctrl In Me.Controls '* 当フォーム上のコントロールすべてを処理
If TypeName(ctrl) = "TextBox" Then '* コントロールが TextBox ならば
iCnt = iCnt + 1 '* カウンタをインクリメント
ReDim Preserve cTextBox(iCnt) '* 配列を拡大
Set cTextBox(iCnt) = New clsTextBox '* そこに新しいクラスを作成
cTextBox(iCnt).TextBox = ctrl '* それに TextBox をセット
End If
Next
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim i As Integer
For i = 0 To UBound(cTextBox())
Set cTextBox(i) = Nothing
Next i
End Sub
'-- clsTextBox.cls モジュール
Option Explicit
Private WithEvents m_TextBox As TextBox
Private Sub m_TextBox_GotFocus()
Debug.Print m_TextBox.Name, "GotFocus"
End Sub
Public Property Let TextBox(oTextBox As TextBox)
Set m_TextBox = oTextBox
End Property
後は、複数のフォームが存在する場合は、ここのフォームがロードされた時に、
同じような処理を行うだけです。
( cTextBox は配列より Collection の方が良いかもしれませんね。)