Zum Inhalt springen

Probleme bei Ereignisauslösung in VB.NET


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

habe ein Problem mit der Ereignisauslösung bei meinem Programm. Es soll ein Ereignis bei überschreiten des Members m_dispo ausgelöst werden (DispoGrenze).

Es geht darum, dass ein Konto erzeugt und mit Werten belegt wird. Sollte bei der Argumentübergabe (Werte) der Dispo (Dispo = -3000)überschritten werden z.B. -4000 so ist das Ereignis DispoGrenze auszulösen und dementsprechend eine Messagebox mit Meldung an den Benutzer auszulösen.

Es soll auch eine Meldung ausgegeben werden, wenn bei der zweiten Buchung der Dispo überschritten wird. Das ganze muss von der Sub Buchung kommen, die macht die Arbeit.

Steh seit einer Woche auf dem Schlauch und hab schon etliche versuche unternommen doch alle schlugen fehl.

Ich vermute die Fehler in den rot markierten Bereichen.

Ich hoffe Ihr könnt mir mit Rat und vielleicht Tat zur Seite stehen.

Vielen Dank schon mal im Voraus

Hier der Code:


Imports System.Console

Imports System.Windows.Forms


Public Class Konto

    Private m_Kontonr As String

    Private m_Kontostand As Decimal

    Private m_Dispo As Decimal

    Event DispoGrenze(ByVal Sender As Object, ByRef cancel As Object)


    Sub New(ByVal KontoNr As String, ByVal Kontostand As Decimal, ByVal Dispo As Decimal)           'Konstruktor

        m_Kontonr = KontoNr

        m_Kontostand = Kontostand

        m_Dispo = Dispo

    End Sub


    Public ReadOnly Property KontoNr() As String

        Get

            KontoNr = m_Kontonr

        End Get

    End Property


    Public ReadOnly Property Kontostand() As Decimal

        Get

            Kontostand = m_Kontostand

        End Get

    End Property


    Public Property Dispo() As Decimal

        Get

            Dispo = m_Dispo

        End Get

        Set(ByVal value As Decimal)

            m_Dispo = value

        End Set

    End Property


   [COLOR="Red"] Sub Buchung(ByVal Betrag As Decimal)

        Dim Abbrechen As Boolean = False

        If Betrag < m_Dispo Then

            RaiseEvent DispoGrenze(Me, Abbrechen)

            If m_Kontostand < m_Dispo Then

                RaiseEvent DispoGrenze(Me, Abbrechen)

            End If

        Else

            m_Kontostand = m_Kontostand + (Betrag)

        End If

    End Sub[/COLOR]

    Sub Ausgabe()                            'Ausgabe der Konten

        WriteLine("Kontonr: {0,-10} Kontostand: {1,4}     Disporahmen: {2,8}", m_Kontonr, m_Kontostand, m_Dispo)

    End Sub

End Class

Public Class Test

    Private Shared WithEvents k As Konto

    Shared Sub Main()

        Dim k As New Konto("123", -8000, -3000)

        k.Ausgabe()

        k.Buchung(-10000)

        k.Ausgabe()

        k.Buchung(-2000)

        k.Ausgabe()

        ReadLine()

    End Sub

    [COLOR="Red"]Private Shared Sub Konto_DispoGrenze(ByVal Sender As Object, ByRef cancel As Object) Handles k.DispoGrenze[/COLOR]

        MessageBox.Show("Test", "Text", MessageBoxButtons.OK, MessageBoxIcon.Error)

    End Sub

End Class

Geschrieben

Hallo Thammes,

dein Fehler liegt in folgender Zeile:

Dim k As New Konto("123", -8000, -3000)
Damit hast du jetzt zwei Variablen mit Namen k. Einmal die Klassenvariable WithEvents und dann die in deiner Funktion. In der Funktion, in der du die Buchungen aufrufst (Main) benutzt du nur die lokale k-Variable, während sich das die Event-Funktion an das DispoGrenze-Event der Klassenvariable k dranhängt. Das Ereignis wird also völlig korrekt ausgelöst, es gibt nur keine Abonenten. Des Rätsels Lösung:
 k  = New Konto("123", -8000, -3000)

So initialisierst du die Variable k nur, aber deklarierst keine Neue.

Geschrieben

Haa, ich werd verrückt, :upps jetzt gehts. Oh mann so ein banaler Fehler.

Auf alles wäre ich gekommen nur auf das nicht.

Vielen Vielen Dank du rettest mir meinen Tag!!

Caio Thammes

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...