Überprüfen, ob Control eine bestimmte Eigenschaft besitzt

  • VB.NET

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

    Überprüfen, ob Control eine bestimmte Eigenschaft besitzt

    Hallo,

    ich wollte mal fragen, ob es möglich ist, ein Control zu überprüfen, ob es eine Bestimmte Eigenschaft hat.
    Also die Eigenschaft, die ich überprüfen möchte, ist die Eigenschaft "Text".

    MfG pc-freack
    Der Zugriff auf diese Eigenschaften erfolgt zur Entwicklungs- und Compilezeit.
    Du hast zur Laufzeit überhaupt keine Möglichkeit,

    VB.NET-Quellcode

    1. Try
    2. MyControl.MyOwnProperty = True ' das nimmt die Umgebung nicht an, wenn die Eigenschaft nicht da ist
    3. Catch ex As Exception
    4. End Try

    solch einen Code zu schreiben, geschweige denn laufen zu lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi
    Reflection?

    VB.NET-Quellcode

    1. Dim myProperty As Reflection.PropertyInfo = GetType(MyType).GetProperty("myPropertyName")
    2. myProperty.SetValue(myInstance, myValue, myIndices)
    3. myProperty.GetValue(myInstance, myIndices)

    myIndices ist ein Array, das aus den Indices besteht, die übergeben werden sollen. Z.B. enthält eine Collection die Eigenschaft Item, der ein Index übergeben werden muss, um das Item halt anzugeben. Also müsste der Code oben für eine ObjectModel.Collection(Of Integer) so aussehen:

    VB.NET-Quellcode

    1. Dim myProperty As Reflection.PropertyInfo = GetType(ObjectModel.Collection(Of Integer)).GetProperty("Item")
    2. Dim instance As New ObjectModel.Collection(Of Integer)
    3. Dim indices() As Object = New Object(){0}
    4. instance.Add(123)
    5. myProperty.SetValue(instance , 10, indices)
    6. myProperty.GetValue(instance , indices)


    So kannst du überprüfen, ob eine Eigenschaft mit einem Namen existiert:

    VB.NET-Quellcode

    1. 'Filter erzeugen, der bestimmt, ob eine Eigenschaft mit dem Namen "Text" verfuegbar ist
    2. 'Dabei wird die Gross-und-Kleinschreibung ignoriert
    3. Dim filter As Reflection.MemberFilter = Function(member As Reflection.MemberInfo, criteria As Object) (member.Name.Equals("Text", StringComparison.InvariantCultureIgnoreCase))
    4. 'Nur Eigenschaften, die sowohl oeffentlich als auch nicht statisch sind, zulassen
    5. Dim flags As Reflection.BindingFlags = Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance
    6. 'Keine Kriterien (filterCriteria) noetig --> Der Parameter ist Nothing
    7. Dim members() As Reflection.MemberInfo = GetType(Control).FindMembers(Reflection.MemberTypes.Property, flags, filter, Nothing)
    8. 'Existiert eine Eigenschaft mit dem Namen Text?
    9. MessageBox.Show((members.Length > 0).ToString)


    Ich kann mir zwar nicht vorstellen, wofür du das brauchen solltest, da ich das noch nie verwenden musste (und das ist auch so nicht unbedingt die schnellste Möglichkeit, zu überprüfen, ob ein Member mit dem Namen existiert), aber du wirst schon wissen, ob du das benötigst. Generell sollte man mit generischen Methoden und Typen oder angepassten Deklarationen auskommen.

    Gruß
    ~blaze~