VB.Net - In Sub eine abgeleitet Klasse ermitteln
Hi,
--> VB.Net
ich habe viele eigene abgeleitete Klassen, z.T. auch mehrfach abgeleitet
Bsp.:
mask1 --> abgeleitet von UserControl
mask2 --> abgeleitet von mask1
mask3 --> abgeleitet von mask1
box1 --> abgeleitet von Textbox
box2 --> abgeleitet von box1
box3 --> abgeleitet von box1
Das sind nur Beispiele! Viele verschiedene Control-Typen.
Ich habe Instanzen von diesen Klassen
M2 --> Instanz von mask2
M3 --> Instanz von mask3
T2 --> Instanz von box2
T3 --> Instanz von box3
Diese Controls können nun ineinander verschachtelt sein. (Child Controls)
z.B.
M2 und M3 können Child Controls enthalten. So auch z.B. vom Typ T2 oder T3.
Ich will nun eine Sub schreiben:
"Finde für diese Instanz eines Controls vom beliebigen Typ X das erste übergeordnete Control vom beliebigen Typ Y"
Normalerweise kann ich ja fragen
Bsp.
Wenn ich jetzt eine Funktion schreibe wie z.B.
dann funktioniert das nicht mit mehrfach abgeleiteten Klassen, weil GetType jene Klasse liefert, aus welcher das Objekt direkt instantiiert ist, und nicht deren Eltern-Klassen.
Also der Plan, in der Funktion mit TypeOf abzufragen, weil dieses auf dann True liefert, wenn man nach einer Eltern-Klasse fragt.
Der Haken: Ich weiß nicht, wie ich jetzt meiner Funktion den zweiten Parameter ControlType übergeben muss, damit ich diesen in der Funktion mit TypeOf verwenden kann:
Könnt Ihr mir folgen?
E.
--> VB.Net
ich habe viele eigene abgeleitete Klassen, z.T. auch mehrfach abgeleitet
Bsp.:
mask1 --> abgeleitet von UserControl
mask2 --> abgeleitet von mask1
mask3 --> abgeleitet von mask1
box1 --> abgeleitet von Textbox
box2 --> abgeleitet von box1
box3 --> abgeleitet von box1
Das sind nur Beispiele! Viele verschiedene Control-Typen.
Ich habe Instanzen von diesen Klassen
M2 --> Instanz von mask2
M3 --> Instanz von mask3
T2 --> Instanz von box2
T3 --> Instanz von box3
Diese Controls können nun ineinander verschachtelt sein. (Child Controls)
z.B.
M2 und M3 können Child Controls enthalten. So auch z.B. vom Typ T2 oder T3.
Ich will nun eine Sub schreiben:
"Finde für diese Instanz eines Controls vom beliebigen Typ X das erste übergeordnete Control vom beliebigen Typ Y"
Normalerweise kann ich ja fragen
If TypeOf Control1.Parent Is Typ1
TypeOf M2 Is mask2 --> True
TypeOf M2 Is UserControl --> True
Wenn ich jetzt eine Funktion schreibe wie z.B.
Public Function FindParentControlOfType(ByVal Value As Control, ByVal ControlType As Type) As Control
Dim µReturnValue As Control = Value
While µReturnValue IsNot Nothing AndAlso _
Not µReturnValue.GetType = ControlType
µReturnValue = µReturnValue .Parent
End While
Return µReturnValue
End Function
Also der Plan, in der Funktion mit TypeOf abzufragen, weil dieses auf dann True liefert, wenn man nach einer Eltern-Klasse fragt.
Der Haken: Ich weiß nicht, wie ich jetzt meiner Funktion den zweiten Parameter ControlType übergeben muss, damit ich diesen in der Funktion mit TypeOf verwenden kann:
While µReturnValue IsNot Nothing AndAlso _
Not TypeOf µReturnValue Is ControlType
µReturnValue = µReturnValue .Parent
End While
Könnt Ihr mir folgen?
E.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 420806
Url: https://administrator.de/forum/vb-net-in-sub-eine-abgeleitet-klasse-ermitteln-420806.html
Ausgedruckt am: 02.04.2025 um 03:04 Uhr
3 Kommentare
Neuester Kommentar
Hi emerics,
ist zwar in c#, aber eventuell hifreich:
https://stackoverflow.com/questions/2742276/how-do-i-check-if-a-type-is- ...
Mayho
ist zwar in c#, aber eventuell hifreich:
https://stackoverflow.com/questions/2742276/how-do-i-check-if-a-type-is- ...
Mayho
Ohhhh LOL !!
So spät wars doch noch gar nicht (??)
hier mal ein Codesnipped von dem aks ich damals etwas ähnliches gesucht habe. Halt leider wieder in C#:
public static T GetPropertyValue<T>(string controlName)
//default return Value for geneneric methode: https://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in-c
//example for generic methode: https://stackoverflow.com/questions/9808035/how-do-i-make-the-return-type-of-a-method-generic
//call example: GetPropertyValue<Visibility>("UiVisibility", "UserControlA");
{
var toreturn = default(T);
var newAssemblyInstance = Assembly.Load(Assembly.GetExecutingAssembly().GetName().Name);
foreach (var uiElement in newAssemblyInstance.GetTypes().Where(s => s.BaseType == typeof(System.Windows.Controls.UserControl)))
{
if (uiElement.Name.ToUpper() == controlName.ToUpper())
{ }
}
return toreturn;
}
Du holst dir also alle Classes und Controls direkt aus dem Assembly in der Methode via Reflection und übergibst nur den Namen des gesuchten Controls als string
Hoffe das hilft dir weiter!
Mayho