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

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

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...