こんにちわ。
ぐぐって見たのですが、どうもわかりません。
どなたかご教授してください。
VB6で開発をしています。
テキストボックスや、コンボボックスのchangeイベントを共有したいと考えているのですが、WithEvents を使って実行する場合は、宣言するときに、型を入力しなくてはなりません。
例)
Public WithEvents commonEventChage As TextBox
そこで、variant型を指定することができないため、異なる型のオブジェクトのイベントを共有することができないのですが、何か方法ってあるのでしょうか?
初心者質問だったら、すいません。
どなたか教えてください。
うーん…ありそうで見つからないですね。
でもまぁ、そこでトリッキー(←多分)なことをするよりも、
・共有される機能を作り、[ComboBox]_Changedと[TextBox]_Changedでその機能を呼び出す。
ようにすればいいだけなのでは?
…無理にやろうとすれば…
'TextCombo.cls
Public Event Change()
Private WithEvents cCombo As ComboBox
Private WithEvents cText As TextBox
Private Sub cCombo_Change()
RaiseEvent Change
End Sub
Private Sub cText_Change()
RaiseEvent Change
End Sub
Public Sub EventSource(ByVal o As Object)
If TypeOf o Is ComboBox Then
Set cCombo = o
Set cText = Nothing
ElseIf TypeOf o Is TextBox Then
Set cCombo = Nothing
Set cText = o
Else
Err.Raise vbObjectError, "ComboBox/TextBox以外のオブジェクトが渡されました"
End If
End Sub
こんなクラスを作って、
'Form1
private withevents c as class1
...
見たいに使うとか。
※未検証
例えば、
Text1のChangeイベントとText2のChangeで同じ処理をしたい、という感じでしょうか?(わかりやすく同じテキストボックスにしましたが)
この解釈でよければ、
Text1_Changeイベントに処理を書き、Text2_Changeイベントには
Text1_Change
と書けばいいと思いますが、これはひょっとしたら誤爆ったかなと書きながら思った
Fatal Error:
Private WithEvents c As TextComboEvent
でした(orz
ガッさんの回答を見る限り、やはり私は誤爆った模様・・・
なるほどー。
勉強になります。
ガッさん、通ってみたさん、ありがとうございました。
あとで読んだときに、(?_?)ってなってしまうと思うので、
助言どおり、トリッキーなコードは使わずに、
TextBoxとComboBoxで分けようと思います。
ツイート | ![]() |