[リストへもどる]
一括表示

投稿時間:2003/10/01(Wed) 15:31
投稿者名:くらす
Eメール:
URL :
タイトル:
WithEventsのコントロールが配列の場合について
いつも参考にさせていただきありがとうございます。

WithEventsについて教えてください。
入力チェック用のクラスモジュールを作り、そこで
Form上に配置しているテキストボックスのイベントを
WithEventsで取得し、処理しています。
クラスにForm上のターゲットのテキストボックスを
設定する際、Form上のテキストボックスが配列の場合
はエラーとなってしまいます。
(ちゃんと添え字も指定して渡しているのですが。)
何か、よい方法はありますでしょうか?


●入力チェック用クラス
WithEvents txtT As TextBox

Public Sub SetTextBox(objText As TextBox)
    Set txtT = objText '→objText が配列のコントロールだとerr
End Sub

●フォーム側
Set m_objTxt = New clsTxt
m_objTxt.SetTextBox(H_SHMCD(0))  

投稿時間:2003/10/01(Wed) 21:11
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: WithEventsのコントロールが配列の場合について
> WithEventsについて教えてください。

残念ながら、WithEventsでは対応できないと思います。

どうやら、コントロールが配列化されている時とそうでない時とでは、
イベントインターフェイスが異なっているようです。試しに、

  Dim Z As TextBoxEvents
  Z.KeyPress …

のようなコードを書いて、IntelliSense を表示させてみたところ、
入力ヒントには「KeyAscii As Integer」と出力されましたので。
# コントロール配列のイベントなら、「Index As Integer, KeyAscii As Integer」になるはず。


これが標準コントロールではなく、ActiveXコントロールであれば、
VBControlExtenderを使って回避する事ができますが、
残念ながら、標準コントロールでは無理でしょう。


Option Explicit

Private WithEvents mobjControl As VB.VBControlExtender

Friend Sub SetControl(ByVal Ctrl As VB.Control)
    Set mobjControl = Ctrl
End Sub

Private Sub mobjControl_ObjectEvent(Info As EventInfo)
    If Info.Name = "Change" Then
        MsgBox "変更された"
    End If
End Sub

投稿時間:2003/10/02(Thu) 09:30
投稿者名:くらす
Eメール:
URL :
タイトル:
Re^2: WithEventsのコントロールが配列の場合について
> これが標準コントロールではなく、ActiveXコントロールであれば、
> VBControlExtenderを使って回避する事ができますが、
> 残念ながら、標準コントロールでは無理でしょう。

レスありがとうございます。
標準コントロールはやはり無理ですか。。。
ActiveXコントロール+VBControlExtenderという方法で
一度、試してみます。
また、壁にぶつかると思いますがよろしくご指導ください。
どうもありがとうございました。