前提・実現したいこと
言語:
VBA(Access2016)
実現したいこと:
- 1 Access.TextBoxに対して共通のイベント処理を実装したい。
- 2 機能毎に実装するクラスを分割したい。
(テキストボックス毎に機能を付け外ししたい)
Access.TextBoxを複数のInterface実装クラスのメンバに持たせ、
その各実装クラスをInterface型の配列に格納すれば
一つのテキストボックスのイベントを同時に拾えるのではないかと考えて
以下のコードを作成してみたところ、
想定していたような動作をしてはいるのですが、
何か問題になりそうな箇所はありますでしょうか。
尚、下記のコードは以下のような想定で作成しました。
MyTextBoxクラスが基本機能を提供するクラス
NumberCheckTextBoxクラスが入力値が数値かどうかをチェックする機能を提供するクラス
RequiredTextBoxクラスが入力必須項目であるかどうかを判定し、画面上の挙動を変更するクラス
該当のソースコード
IControl クラス
VBA
1 2Public Sub TestSub() 3End Sub 4
IControl_MyTextBoxクラス
VBA
1Implements IControl 2 3Private WithEvents m_TextBox As Access.TextBox 4Public Sub IControl_TestSub() 5 Debug.Print "IControl_MyTextBox_TestSub!" 6End Sub 7Private Sub m_TextBox_Click() 8 Debug.Print "IControl_MyTextBox_OnClick!" 9End Sub 10Public Sub Initialize(value As Access.TextBox) 11 Set m_TextBox = value 12 m_TextBox.OnClick = "[EVENT PROCEDURE]" 13End Sub 14
IControl_NumberCheckTextBoxクラス
VBA
1Implements IControl 2 3Private WithEvents m_TextBox As Access.TextBox 4 5Public Sub IControl_TestSub() 6 Debug.Print "IControl_RequiredTextBox_TestSub!" 7End Sub 8 9Private Sub m_TextBox_Click() 10 Debug.Print "IControl_NumberCheckTextBox_OnClick!" 11End Sub 12 13Public Sub Initialize(value As Access.TextBox) 14 Set m_TextBox = value 15End Sub 16
IControl_RequiredTextBoxクラス
VBA
1Implements IControl 2 3Private WithEvents m_TextBox As Access.TextBox 4 5Public Sub IControl_TestSub() 6 Debug.Print "IControl_RequiredTextBox_TestSub!" 7End Sub 8 9Private Sub m_TextBox_Click() 10 Debug.Print "IControl_RequiredTextBox_OnClick!" 11End Sub 12 13Public Sub Initialize(value As Access.TextBox) 14 Set m_TextBox = value 15End Sub
テスト用フォーム (Me.txtはフォーム上に配置されたテキストボックスです)
VBA
1Private TestTextBox(2) As IControl 2 3Private Sub Form_Open(Cancel As Integer) 4 Dim myText As IControl_MyTextBox 5 Set myText = New IControl_MyTextBox 6 myText.Initialize Me.txt 7 8 Dim myRequired As IControl_RequiredTextBox 9 Set myRequired = New IControl_RequiredTextBox 10 myRequired.Initialize Me.txt 11 12 Dim myNumberCheck As IControl_NumberCheckTextBox 13 Set myNumberCheck = New IControl_NumberCheckTextBox 14 myNumberCheck.Initialize Me.txt 15 16 Set TestTextBox(0) = myText 17 Set TestTextBox(1) = myRequired 18 Set TestTextBox(2) = myNumberCheck 19End Sub 20 21
試したこと
上記のコードを実行し
フォーム上のテキストボックスをクリックすると
イミディエイトウィンドウに以下の文字列が出力されました。
VBA
1IControl_MyTextBox_OnClick! 2IControl_RequiredTextBox_OnClick! 3IControl_NumberCheckTextBox_OnClick!
補足情報(FW/ツールのバージョンなど)
言語:VBA(Access2016 32bit)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/27 07:07
2020/06/27 07:31
2020/06/27 13:54