Per Event Sub ausführen

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von darkman203.

    Per Event Sub ausführen

    Hallo zusammen,

    ich habe zwei user controls.
    Das user Control uc_Stammkunden_Überischt bekommt die Kundennummer des aktuell ausgewählten Kunden vom user control Import übergeben. (public shared _Id_Aktueller_Kunde)

    Wenn sich die Variabel _Id_Aktueller_Kunde ändert soll die Sub Test ausgeführt werden.
    Diese ist aber bei Public Shared Sub MyHandle nicht bekannt.

    Wie kann ich bei Änderung der Variabel jetzt die TestSub aufrufen?

    VB.NET-Quellcode

    1. Public Class uc_Stammkunden_Übersicht
    2. Public Shared Event MyVariable_Aktueller_Kunde_Changed()
    3. Public Shared _Id_Aktueller_Kunde As Integer = 0
    4. Public Shared Property Id_Aktueller_Kunde As Integer
    5. Get
    6. Return _Id_Aktueller_Kunde
    7. End Get
    8. Set(value As Integer)
    9. _Id_Aktueller_Kunde = value
    10. RaiseEvent MyVariable_Aktueller_Kunde_Changed()
    11. End Set
    12. End Property
    13. Public Shared Sub MyHandle() Handles MyClass.MyVariable_Aktueller_Kunde_Changed
    14. MessageBox.Show(_Id_Aktueller_Kunde.ToString)
    15. End Sub
    16. Sub test()
    17. Dim a As Integer = bs_stammkunden.FindX("Kundennummer", _Id_Aktueller_Kunde)
    18. bs_stammkunden.Position = a
    19. End Sub
    20. End Class
    Warum sind die Dinger

    darkman203 schrieb:

    VB.NET-Quellcode

    1. Shared
    :?:
    Hast Du nur genau einen Stammkunden?
    Nimm das Shared raus und Du kannst für jeden Kunden eine unabhängige Instanz anlegen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo EDR,

    ​Ganz einfach: Die Variable _Id_Aktueller_Kunde darf keinesfalls Public sein.
    Dann haben Aufrufer keine andere Möglichkeit mehr, als den Wert über die Property zuzuweisen.
    Und im Property-Setter kannst du ja schalten und walten wie wolle.


    ​Da liegt ja genau mein Problem. Ich muss _Id_Aktueller_Kunde aus einem anderem BenutzerSteuerelement aufrufen.
    ​Und wenn ich es als Private deklariere, ist es dort nicht sichtbar.

    darkman203 schrieb:

    sichtbar
    Wenn Id_Aktueller_Kunde public ist, sollte _Id_Aktueller_Kunde nicht public sein (ohne und mit führendem Unterstrich) :!:
    Warum sind die Dinger Shared?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wieso geht das nicht so ?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class uc_Stammkunden_Übersicht
    2. Public Shared Event MyVariable_Aktueller_Kunde_Changed()
    3. Private Shared _Id_Aktueller_Kunde As Integer = 0
    4. Public Shared Property Id_Aktueller_Kunde As Integer '(Modifier eben nach Bedarf noch einschränken)
    5. Get
    6. Return _Id_Aktueller_Kunde
    7. End Get
    8. Set(value As Integer)
    9. _Id_Aktueller_Kunde = value
    10. Dim a As Integer = bs_stammkunden.FindX("Kundennummer", _Id_Aktueller_Kunde)
    11. bs_stammkunden.Position = a
    12. RaiseEvent MyVariable_Aktueller_Kunde_Changed()
    13. End Set
    14. End Property
    15. Public Shared Sub MyHandle() Handles MyClass.MyVariable_Aktueller_Kunde_Changed
    16. MessageBox.Show(_Id_Aktueller_Kunde.ToString)
    17. End Sub
    18. End Class


    Hilfreiche Antworten als solche zu Kennzeichnen wäre klasse 8-)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ftzdOp“ ()

    Ok, musste es erst mal ein paar Tage ruhen lassen und jetzt wo ich mich nochmal dran gesetzt habe, denke habe ich mein Problem auch erkannt.

    Thx, so funktioniert es.
    ​@Ede: Tja du hast wie immer Recht gehabt ;)

    ftzdOp schrieb:

    Wieso geht das nicht so ?

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class uc_Stammkunden_Übersicht
    2. Public Shared Event MyVariable_Aktueller_Kunde_Changed()
    3. Private Shared _Id_Aktueller_Kunde As Integer = 0
    4. Public Shared Property Id_Aktueller_Kunde As Integer '(Modifier eben nach Bedarf noch einschränken)
    5. Get
    6. Return _Id_Aktueller_Kunde
    7. End Get
    8. Set(value As Integer)
    9. _Id_Aktueller_Kunde = value
    10. Dim a As Integer = bs_stammkunden.FindX("Kundennummer", _Id_Aktueller_Kunde)
    11. bs_stammkunden.Position = a
    12. RaiseEvent MyVariable_Aktueller_Kunde_Changed()
    13. End Set
    14. End Property
    15. Public Shared Sub MyHandle() Handles MyClass.MyVariable_Aktueller_Kunde_Changed
    16. MessageBox.Show(_Id_Aktueller_Kunde.ToString)
    17. End Sub
    18. End Class