VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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 の方が良いかもしれませんね。)


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -