vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Delegate zwischen Hauptprogramm und einer Klasse 
Autor: Manfred X
Datum: 17.07.12 11:09

Hallo!

Prüfe mal diese Variante.

Die untergeordnete Klasse löst ein Ereignis aus.
Das Hauptprogramm verarbeitet die gelieferten Argumente (e-Parameter)
in einer Funktion seiner Wahl und gibt das Ergebnis oder
die Abbruchmeldung zurück.

Die Klasse für den Eventparameter (Datenaustausch):
Public Class FormulaEventArgs
    Inherits EventArgs
 
    Dim _args As Double()   'Argumente der Formel
    Dim _result As Double    'Ergebnis der Formel
    Dim _cancel As Boolean  'Rückmeldung des Hauptprogramms
 
    Public Sub New(ByVal args() As Double)
        _args = CType(args, Double())
    End Sub
 
    Public ReadOnly Property Args() As Double()
        Get
           If _args Is Nothing Then Return Nothing
           Return CType(_args.Clone, Double())
        End Get
    End Property
 
    Public Property Result() As Double
        Set(ByVal value As Double)
            _result = value
        End Set
        Get
            Return _result
        End Get
    End Property
 
    Public Property Cancel As Boolean
        Set(ByVal value As Boolean)
            _cancel = value
        End Set
        Get
            Return _cancel
        End Get
    End Property
End Class
Die untergeordnete Klasse:
Public Class cComputeFormula
 
    Public Event DoCompute _
       (ByVal sender As Object, ByVal e As FormulaEventArgs)
 
    Public Function GetFormulaResult(ByVal args() As Double) As Double
        Dim e As New FormulaEventArgs(args)
 
        e.Result = Double.NaN  'falls keine Verarbeitung erfolgt
        e.Cancel = True
 
        'Funktion im Hauptprogramm anfordern
        RaiseEvent DoCompute(Me, e)
 
        'Rückgabe aus dem Hauptprogram verarbeiten   
        If e.Cancel OrElse Double.IsNaN(e.Result) Then
            'Abbruch, Hauptprogramm hat nichts geliefert
            Throw New ArgumentException
        Else
            'Weiterverarbeitung von e.result
            Return e.Result
        End If
    End Function
End Class
Im Hauptprogramm:
'Deklaration
Dim WithEvents myComputeFormula As New cComputeFormula
 
'Aufruf (in einer Routine):
Dim result As Double = myCompteFormula.GetFormularesult _
      ({12.0#, 14.0#, 16.0#})
 
 
'Methode im Hauptprogramm per Eventhandler ausführen
Private Sub cf_ComputeFormula(ByVal sender As Object, _
    ByVal e As FormulaEventArgs) Handles cf.DoCompute
 
    e.Result = Formula(e.Args)
    If e.Result <= 0 Then e.Cancel = True
End Sub
 
'Die für die untergeordnete Klasse auszuführende Funktion
Private Function Formula(ByVal args() As Double) As Double
 
  Dim result As Double = 0
 
  If args Is Nothing OrElse args.Length < 1 Then Return -1
 
  For i As Integer = 0 To args.Length - 1
      result += args(i) ^ 2
  Next i
 
  If result > 0.000001 Then
     result = Math.Sqrt(result)
  Else
     result = 0
  End If
  Return result
End Function
MfG
Manfred
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Delegate zwischen Hauptprogramm und einer Klasse2.036Digit16.07.12 20:50
Re: Delegate zwischen Hauptprogramm und einer Klasse947Manfred X16.07.12 22:15
Re: Delegate zwischen Hauptprogramm und einer Klasse927Digit17.07.12 09:01
Re: Delegate zwischen Hauptprogramm und einer Klasse944Manfred X17.07.12 11:09
Re: Delegate zwischen Hauptprogramm und einer Klasse877Manfred X17.07.12 11:46

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel