1

カスタム イベントの作成に関するこの MSDN ガイドに従っていました。プロセスを理解したような気がしますが、なぜCompile Error: Event Not Foundfor を取得しているのかわかりませんRaiseEvent ItemAdded。奇妙なことに、ItemAdded イベントは IDE によって認識されるため (すべて小文字で入力すると、自動的に適切に書式設定されます)、VB によって認識されることがわかります。

DataComboBox クラス モジュール コード:

Public Event ItemAdded(sItem As String, fCancel As Boolean)

Private pComboBox As Control

Public Property Set oComboBox(cControl As Control)
    Set pComboBox = cControl
End Property

Public Property Get oComboBox() As Control
    oComboBox = pComboBox
End Property

Private Sub Class_Initialize()

End Sub

Private Sub Class_Terminate()

End Sub

UserForm には、btnAdd という名前の CommandButton と cboData という名前の ComboBox の 2 つのコントロールが含まれています。

ユーザーフォームコード:

Private WithEvents mdcbCombo As DataComboBox

Private Sub UserForm_Initialize()
    Set mdcbCombo = New DataComboBox
    Set mdcbCombo.oComboBox = Me.cboData
End Sub

Private Sub mdcbCombo_ItemAdded(sItem As String, fCancel As Boolean)
    Dim iItem As Long
    If LenB(sItem) = 0 Then
        fCancel = True
        Exit Sub
    End If
    For iItem = 1 To Me.cboData.ListCount
        If Me.cboData.List(iItem) = sItem Then
            fCancel = True
            Exit Sub
        End If
    Next iItem
End Sub

Private Sub btnAdd_Click()
    Dim sItem As String
    sItem = Me.cboData.Text
    AddDataItem sItem
End Sub

Private Sub AddDataItem(sItem As String)
    Dim fCancel As Boolean
    fCancel = False
    
    RaiseEvent ItemAdded(sItem, fCancel)
    
    If Not fCancel Then Me.cboData.AddItem (sItem)
    
End Sub
4

1 に答える 1

2

クラス ファイル レベル外でイベントを発生させることはできません。

このようなルーチンを「DataComboBox1」内に追加して、外部でイベントを発生できるようにします。

Public Sub OnItemAdded(sItem As String, fCancel As Boolean)
    RaiseEvent ItemAdded(sItem, fCancel)
End Sub

次に、現在のオブジェクトで OnItemAdded を呼び出します。

例...

Private WithEvents mdcbCombo As DataComboBox
...
mdcbCombo.OnItemAdded(sItem, fCancel)
于 2013-03-15T01:02:45.380 に答える