Farbe als optionaler Wert an Funktion übergeben - wäre nicht konstant !

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Farbe als optionaler Wert an Funktion übergeben - wäre nicht konstant !

    Moin!

    ich möchte an eine Funktion optional Parameter übergeben. Dabei muss ich bekanntlich einen Wert vorgeben als Default.

    Die Funktion sieht so aus:

    VB.NET-Quellcode

    1. Private Sub DrawPoint(Point As Mum.Geo.Geometry.Point, _
    2. Optional RedlineLayerName As String = "", _
    3. Optional FarbeFuellung As System.Drawing.Color = Drawing.Color.Red, _
    4. Optional FarbeRand As System.Drawing.Color = Drawing.Color.Red, _
    5. Optional SymbolSize As Double = 1.0)


    Ich bekomme aber nun folgende Meldung:



    Kann mir einer weiterhelfen?

    Gruß Jan
    Hey!
    Wenn du dir die Metadaten von Drawing.Color einmal ansiehst, wirst du feststellen das alle Farben als Property definiert sind:
    Beispiel:

    VB.NET-Quellcode

    1. Public Shared ReadOnly Property MediumAquamarine As Color


    Properties sind keine Konstanten, Ich würde dir empfehlen als Standartwert null bzw. auf vb-anisch Nothing zu benutzen.
    Im Code prüfst du dann ob der Wert Nothing ist und weist ihm dann ggf. einen Wert zu.

    Also ungefähr so:

    VB.NET-Quellcode

    1. Private Sub DrawPoint(Point As Mum.Geo.Geometry.Point, _
    2. Optional RedlineLayerName As String = "", _
    3. Optional FarbeFuellung As System.Drawing.Color = Nothing, _
    4. Optional FarbeRand As System.Drawing.Color = Nothing, _
    5. Optional SymbolSize As Double = 1.0)
    6. If (FarbeFuellung = Nothing) Then
    7. FarbeFuellung = Colors.Red
    8. End If
    9. 'Selbiges mit der Randfarbe



    LG
    こんにちわ
    Achte beim stellen von Fragen auf eine genaue Fragestellung, mir passiert das selbst häufig, andere können dir dann nicht so gut helfen.
    Wenn eine Methode bereits so viele Parameter erwartt könnte man es auch über eine Art Settings Klasse lösen:

    VB.NET-Quellcode

    1. Public Class DrawPointSettings
    2. Public Property Point As Point
    3. Public Property RedlineLayerName As String
    4. Public Property FarbeFuellung As System.Drawing.Color
    5. Public Property FarbeRand As System.Drawing.Color
    6. Public Property SymbolSize As Double
    7. Public Sub New()
    8. Me.Point = New Point(1, 1)
    9. Me.RedlineLayerName = String.Empty
    10. Me.FarbeFuellung = Color.Red
    11. Me.FarbeRand = Color.Red
    12. Me.SymbolSize = 1.0
    13. End Sub
    14. End Class


    Hier werden die Werte, welche normalerweise in den Optionalen Parametern hinterlegt sind als Standardwerte verwendet.
    Zum benutzen:

    VB.NET-Quellcode

    1. Dim dps = New DrawPointSettings() With {.Point = New Point(1, 1), .RedlineLayerName = "Hallo", .FarbeFuellung = Color.AliceBlue, .FarbeRand = Color.Black, .SymbolSize = 2.1}
    2. DrawPoint(dps)
    3. Private Sub DrawPoint(drawPointSettings As DrawPointSettings)
    4. ' Mach was damit
    5. End Sub


    (Habe Mum.Geo.Geometry.Point mit Point getauscht da ich die Klasse nicht kenne)

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten