1

私は MVP プロジェクトを作成しており、ほとんどの部分が整っていますが、いくつかの点について少し混乱しています。これが私のコードです:

//Used to invoke asynchronous calls.
Public Delegate ModelNumberChangedDelegate(sender as Object, e as EventArgs)

Public Interface IEquipmentView
    Event ModelNumberChanged as ModelNumberChangedDelegate

    Property ModelNumber as String
End Interface

Public Class Equipment
    Inherits Form
    Implements IEquipmentView

Public Property ModelNumber Implements IEquipmentView.ModelNumber
    Get
        return txtModelNumber.Text //A texbox
    End Get
    Set(value as String)
        txtModelNumber.Text = value
    End Set
End Property

Public Event ModelNumberChanged(sender as Object, e as EventArgs) _
    Implements IEquipmentView.ModelNumberChanged

Public Sub New()
    InitializeComponent()

    AddHandler ModelNumberChanged, AddressOf view_ModelNumberChanged
End Sub   

Private Sub view_ModelNumberChanged(sender as Object, e as EventArgs)
    //If invoke is required, create a ModelNumberChangedDelegate and invoke it
    //at this address. Otherwise, just execute the method.
End Sub

End Class

私の混乱は、このイベントを実際にどのように発生させるべきかということにあります。次のように、単にプロパティに移動して ModelChangedEvent を手動で発生させる必要があります。

Public Property ModelNumber Implements IEquipmentView.ModelNumber
    Get
        return txtModelNumber.Text //A texbox
    End Get
    Set(value as String)
        txtModelNumber.Text = value
        RaiseEvent ModelNumberChangedEvent(txtModelNumber, Nothing)
    End Set
End Property

または、次のように、コントロールの変更イベントをデリゲート関数に直接バインドする必要があります。

Public Sub view_ModelNumberChanged(sender as Object, e as EventArgs) _
    Handles txtModelNumber.Changed
    //If invoke is required, create a ModelNumberChangedDelegate and invoke it
    //at this address. Otherwise, just execute the method.
End Sub

前もって感謝します!

注: コメントが間違っていることはわかっていますが'、投稿で使用すると文字列として解釈されます。

4

0 に答える 0