異なるオブジェクトのイベントの共有をするには?

解決


まるちゃん  2005-11-07 09:54:22  No: 127365

こんにちわ。
ぐぐって見たのですが、どうもわかりません。
どなたかご教授してください。
VB6で開発をしています。

テキストボックスや、コンボボックスのchangeイベントを共有したいと考えているのですが、WithEvents を使って実行する場合は、宣言するときに、型を入力しなくてはなりません。

例)
Public WithEvents commonEventChage As TextBox

そこで、variant型を指定することができないため、異なる型のオブジェクトのイベントを共有することができないのですが、何か方法ってあるのでしょうか?

初心者質問だったら、すいません。
どなたか教えてください。


ガッ  2005-11-07 10:14:47  No: 127366

うーん…ありそうで見つからないですね。
でもまぁ、そこでトリッキー(←多分)なことをするよりも、
・共有される機能を作り、[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
...
見たいに使うとか。
※未検証


通ってみた  2005-11-07 10:16:02  No: 127367

例えば、
Text1のChangeイベントとText2のChangeで同じ処理をしたい、という感じでしょうか?(わかりやすく同じテキストボックスにしましたが)

この解釈でよければ、
Text1_Changeイベントに処理を書き、Text2_Changeイベントには

Text1_Change

と書けばいいと思いますが、これはひょっとしたら誤爆ったかなと書きながら思った


ガッ  2005-11-07 10:16:17  No: 127368

Fatal Error:
  Private WithEvents c As TextComboEvent
  でした(orz


通ってみた  2005-11-07 10:17:34  No: 127369

ガッさんの回答を見る限り、やはり私は誤爆った模様・・・


まるちゃん  2005-11-08 10:21:47  No: 127370

なるほどー。
勉強になります。

ガッさん、通ってみたさん、ありがとうございました。

あとで読んだときに、(?_?)ってなってしまうと思うので、
助言どおり、トリッキーなコードは使わずに、
TextBoxとComboBoxで分けようと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加