RaiseEvent-Anweisung

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von djsnoopy.

    RaiseEvent-Anweisung

    Hallo.

    Ich habe folgendes von C# nach VB konvertiert :





    VB.NET-Quellcode

    1. Private Sub InDevice_MessageReceived(ByVal sender As Object, ByVal e As MidiMessageEventArgs)
    2. If e.IsShortMessage Then
    3. If e.ShortMessage.StatusType = MIDIStatus.NoteOn AndAlso e.ShortMessage.Channel = 1 AndAlso e.ShortMessage.Data1 = 1 Then
    4. buttonStart.PerformClick()
    5. End If
    6. End If
    7. If e.IsShortMessage Then
    8. If e.ShortMessage.StatusType = MIDIStatus.NoteOn AndAlso e.ShortMessage.Channel = 0 AndAlso e.ShortMessage.Data1 = 0 Then
    9. button1.PerformClick()
    10. End If
    11. End If
    12. If True Then
    13. If Me.textBoxMsg.Text.Length > 32000 ThenMe.textBoxMsg.Clear()
    14. End If
    15. If e.IsShortMessage Then
    16. If Me.checkBoxHex.Checked ThenMe.textBoxMsg.AppendText([String].Format("{0} : {1}" & vbCr & vbLf, e.ShortMessage.ID, e.ShortMessage.ToString("{T}" & vbTab & "{A} {H}")))
    17. ElseMe.textBoxMsg.AppendText([String].Format("{0} : {1}" & vbCr & vbLf, e.ShortMessage.ID, e.ShortMessage.ToString("G")))
    18. End If
    19. ElseIf e.IsSysExMessage ThenMe.textBoxMsg.AppendText([String].Format("{0} : {1}" & vbCr & vbLf, e.SysExMessage.ID, e.SysExMessage.ToString()))
    20. ElseIf e.EventType = MidiMessageEventType.Opened ThenMe.textBoxMsg.AppendText([String].Format("Midi device {0} opened." & vbCr & vbLf, e.DeviceID))
    21. ElseIf e.EventType = MidiMessageEventType.Closed ThenMe.textBoxMsg.AppendText([String].Format("Midi device {0} closed." & vbCr & vbLf, e.DeviceID))
    22. ElseIf e.EventType = MidiMessageEventType.Started ThenMe.textBoxMsg.AppendText([String].Format("Midi device {0} started." & vbCr & vbLf, e.DeviceID))
    23. ElseIf e.EventType = MidiMessageEventType.Stopped ThenMe.textBoxMsg.AppendText([String].Format("Midi device {0} stopped." & vbCr & vbLf, e.DeviceID))
    24. End If
    25. End If
    26. End Sub



    VB.NET-Quellcode

    1. Private Sub StartDevice(ByVal deviceID As Integer)Me.textBoxMsg.Clear()
    2. _inDevice = New MidiInputDevice(deviceID)_inDevice.AutoPairController = Me.checkBoxAutoPair.Checked
    3. _inDevice.MessageFilter = BuildFilter()
    4. _inDevice.MessageReceived += New MidiMessageEventHandler(AddressOf InDevice_MessageReceived) XXXXXXXXX
    5. If _inDevice.Open() Then
    6. Me.buttonStop.Enabled = True
    7. Me.buttonStart.Enabled = False
    8. If Not _inDevice.Start() ThenMessageBox.Show(Me, "Midi device could not be started! Error " & _inDevice.LastErrorCode.ToString(), "Midi Error")
    9. End If
    10. ElseMessageBox.Show(Me, "Midi device could not be opened! Error " & _inDevice.LastErrorCode.ToString(), "Midi Error")
    11. End If
    12. End Sub
    13. Private Sub StopDevice()
    14. If _inDevice IsNot Nothing AndAlso _inDevice.IsStarted Then
    15. _inDevice.[Stop]()
    16. _inDevice.Close()_inDevice.MessageReceived -= New MidiMessageEventHandler(AddressOf InDevice_MessageReceived) XXXXXXXXX
    17. Me.buttonStop.Enabled = False
    18. Me.buttonStart.Enabled = True
    19. End If
    20. End Sub






    Es kommt folgender Fehler:



    Public Event MessageReceived(sender As Object, e As radio42.Multimedia.Midi.MidiMessageEventArgs)" ist ein Ereignis und kann nicht direkt aufgerufen werden. Verwenden Sie eine RaiseEvent-Anweisung, um ein Ereignis aufzurufen

    ( siehe Zeile mit XXXXXXXXXX)

    Wie muß ich das ändern ?
    Ändere das:

    VB.NET-Quellcode

    1. _inDevice.Close()_inDevice.MessageReceived -= New MidiMessageEventHandler(AddressOf InDevice_MessageReceived)


    in das:

    VB.NET-Quellcode

    1. _inDevice.Close()
    2. Removehandler _inDevice.MessageReceived AddressOf InDevice_MessageReceived


    und das:

    VB.NET-Quellcode

    1. _inDevice.MessageReceived += New MidiMessageEventHandler(AddressOf InDevice_MessageReceived)


    in das:

    VB.NET-Quellcode

    1. Addhandler _inDevice.MessageReceived AddressOf InDevice_MessageReceived
    Von meinem iPhone gesendet