Thammes Geschrieben 9. Februar 2009 Geschrieben 9. Februar 2009 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 Zitieren
el programador Geschrieben 11. Februar 2009 Geschrieben 11. Februar 2009 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. Zitieren
Thammes Geschrieben 11. Februar 2009 Autor Geschrieben 11. Februar 2009 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 Zitieren
Empfohlene Beiträge
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.