Brushes

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Liebe Community,

    ich habe eine Variable

    VB.NET-Quellcode

    1. Dim Brush As Brush


    Dieser Variable werden dann Solidbrushes, LinearGradientBrushes, Hatchbrushes oder Texturebrushes zugewiesen. Ich möchte nun herausfinden, welche Art von Brush zugewiesen wurde.

    Dazu war für mich das Naheliegendste:

    VB.NET-Quellcode

    1. If Brush Is Solidbrush

    wo mir VS jedoch folgenden Fehler anzeigt:

    Quellcode

    1. 'SolidBrush' is a class type and cannot be used as an expression


    Wenn ich mir

    VB.NET-Quellcode

    1. Brush.ToString

    ausgeben lasse, sehe ich, welche Art von Brush ich habe. Aber da muss es doch einen eleganteren Lösungsweg geben als diesen auszulesen, oder?

    Ich hoffe jemand kennt die Lösung zu diesem Problem

    Grüße
    Auf der Suche nach Coding-Kursen auf Lence.at
    Besser wäre so:

    VB.NET-Quellcode

    1. If brush.GetType() = GetType(SolidBrush) Then
    2. End If


    Keine Ahnung ob das geht. Habs nur von C# nach VB.NET konvertieren lassen ^^

    C#-Quellcode

    1. if(brush.GetType() == typeof(SolidBrush)) {
    2. }
    KaskadekingDE on GitHub :)
    Bitte keine Fragen über Programmierung per PN! Dafür ist das Forum hier.

    Who cares? ¯\_(ツ)_/¯
    Hi
    das Konstrukt in VB.Net: Typeof <value> Is <Type>. Die Vererbung wird beachtet.
    Beispiele:

    VB.NET-Quellcode

    1. Dim x As Brush = New SolidBrush(Color.FromArgb(128, 0, 0, 0))
    2. If TypeOf x Is SolidBrush Then
    3. '...

    Anstatt TypeOf und Cast zu kombinieren, sollte man auf TryCast zurückgreifen, das Nothing zurückgibt, wenn das Objekt nicht dem getesteten Typ entsprach.

    In C# gibt's das gleiche Konstrukt mit is und as.
    Zu beachten bei Wertetypen: Werte vom Typ T können nicht Nothing/null sein, daher wird Nullable<T> zurückgegeben (alias T?), T entspricht nicht Nullable<T>, sondern einer Kapselung in einem neuen Wertetyp, sodass eine Abfrage auf Existenz möglich ist.

    Die Vorschläge von @KaskadekingDE sind explizite Abfragen auf den Typen, sodass die Vererbungsreihenfolge nicht beachtet wird. (Als Seiteninfo btw.: Wenn man lediglich den Typ, nicht die zugehörige Instanz kennt, kann man über Type.IsAssignableFrom das gleiche bewirken: <instanz> is <type> wird dann zu GetType(<type>).IsAssignableFrom(<instanztyp>) ).

    Viele Grüße
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()