Event innerhalb Structure außerhalb ausloesen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Event innerhalb Structure außerhalb ausloesen

    Hallo zsm,

    habe ein Verstaendnisproblem warum Ich ein Event innerhalb einer Structure von Außen nicht ausloesen kann. Handler auf das Event außerhalb der Structure kann Ich setzen, ausloesen jedoch nicht...

    Zeile 15 hat kein Zugriff. Warum? ?(

    Laut MSDN sollte es funktionieren
    learn.microsoft.com/en-us/dotn…ow-to-declare-a-structure

    VB.NET-Quellcode

    1. Private Structure employee
    2. Public givenName As String
    3. Public familyName As String
    4. Public phoneExtension As Long
    5. Private salary As Decimal
    6. Public Sub giveRaise(raise As Double)
    7. salary *= raise
    8. End Sub
    9. Public Event salaryReviewTime()
    10. End Structure



    Similarly, you can raise the salaryReviewTime event from outside the structure.


    VB.NET-Quellcode

    1. [b][/b]Module Module1
    2. Private Structure Cable
    3. Friend Shared ConnectorA As String
    4. Friend Shared ConnectorB As String
    5. Friend Shared Event Connected(Status As Boolean)
    6. End Structure
    7. Sub Main()
    8. AddHandler Cable.Connected, AddressOf GetCableType ' das geht
    9. RaiseEvent Cable.Connected(true) 'haette so funzen sollen
    10. End Sub
    11. Private Sub GetCableType(_Status As Boolean)
    12. 'Some lines of code
    13. End Sub
    14. End Module


    Nach mehreren Versuchen kam Ich auf die Idee den Event innerhalb der Structure, mittels einer Prozedur auf die Ich von Außen zugreiffen kann, ab zu feuern doch die Loesung gefaellt mir nicht, sodass Ich mein Problem zurueckforderte und diesen Thread aufmachte...

    VB.NET-Quellcode

    1. Module Module1
    2. Private Structure Cable
    3. Friend Shared ConnectorA As String
    4. Friend Shared ConnectorB As String
    5. Friend Shared Event Connected(Status As Boolean)
    6. Friend Shared Sub UseThisToRaiseAnEvent(_status As Boolean)
    7. RaiseEvent Connected(_status)
    8. End Sub
    9. End Structure
    10. Sub Main()
    11. AddHandler Cable.Connected, AddressOf GetCableType
    12. Cable.UseThisToRaiseAnEvent(False) 'das funzt
    13. End Sub
    14. Private Sub GetCableType(_Status As Boolean)
    15. 'Some lines of code
    16. End Sub
    17. End Module

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ATXMega256@32MHz“ ()

    ATXMega256@32MHz schrieb:

    ein Event innerhalb einer Structure von Außen nicht ausloesen kann. Handler auf das Event außerhalb der Structure kann Ich setzen, ausloesen jedoch nicht.
    Tja, das ist nunmal so, seit Anbeginn.
    täte mich wundern, wenn sie das jetzt geändert hätten.
    Das Schlüsselwort RaiseEvent funzt nur mit Events innerhalb der Klasse.
    Ich wusste garnet, dass Structs überhaupt Events haben können - kommt mir ziemlich hanebüchen vor.



    Das MSDN-Beispiel ist idiotisch. Die Methode heisst giveRaise, aber ich kann nicht erkennen, was die mit dem Raisen von irgendwas zu tun hätte.
    So wäre es eher sinnvoll: salary wird erhöht, und anschliessend das Event geraist

    VB.NET-Quellcode

    1. Private Structure employee
    2. Public givenName As String
    3. Public familyName As String
    4. Public phoneExtension As Long
    5. Private salary As Decimal
    6. Public Sub giveRaise(raise As Double)
    7. salary *= raise
    8. RaiseEvent salaryReviewTime
    9. End Sub
    10. Public Event salaryReviewTime()
    11. End Structure
    Jo, und dieser MSDN-Satz:

    MSDN schrieb:

    Similarly, you can raise the salaryReviewTime event from outside the structure.
    ist höchst missverständlich.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Irgendwie lese Ich hier ein Wiederspruch aus

    Tja, das ist nunmal so, seit Anbeginn.

    zu

    Ich wusste garnet, dass Structs überhaupt Events haben können


    Woher weiß man sowas, Erfahrung? Zufaellig mal in einem Artikel aufgenommen? Bist du seit 2002 mit vb.net am start? Von solchen Falschaussagen auf MSDN existieren leider ein paar, was meist sinnlose stundenlange Suchmaschinengebrauch zur Folge hat.
    Wollte dahin mal eine Mail schreiben, habe gescrollt und einen Link auf der o.g. Seite gefunden, der dampfende Z hat bereits ein Issue eroeffnet fuer alle die das mitlesen moechten:
    github.com/dotnet/docs/issues/36231

    @VaporiZed Kannst Du uns bitte bei einem Feedback seitens Autor hier auf dem laufenden halten?

    Empoerend oder Abneigend, wayne, habe mich schlussendlich doch fuer meine Loesung oben entschieden einzelne events in structures zu packen wenn sie im Kontext einen Nenner haben, macht das interpretieren von Code fuer dritte annehmlicher.

    ATXMega256@32MHz schrieb:

    Kannst Du uns bitte bei einem Feedback seitens Autor hier auf dem laufenden halten?
    Mach ich, sobald sich da mal was tun sollte.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Jo, das war bisserl missverständlich ausgedrückt. Hier der richtige Zusammenhang:

    ErfinderDesRades schrieb:

    Tja, das ist nunmal so, seit Anbeginn[...]:
    Das Schlüsselwort RaiseEvent funzt nur mit Events innerhalb der Klasse.
    Das kann man glaub in jedem Vb.Net-Lernbuch nachlesen.
    Vielleicht isses sogar auf MSDN direkt erklärt, bei den Schlüsselworten.



    ErfinderDesRades schrieb:

    Ich wusste garnet, dass Structs überhaupt Events haben können - kommt mir ziemlich hanebüchen vor.
    Damit habich quasi ein ganz anderes Thema angefangen - die Sätze sind also nicht widersprüchlich, sondern beziehen sich auf verschiedenes.