Ich hatte das Problem, meine Anwendungen auf eine andere Screen-Auflösung als der, unter der die Anwendungen entwickelt wurden, anzupassen; insbesondere Fontgrößen. Die Fenster enthalten viele Controls, sodass wirklich Funktionen für alle notwendig wurden. Die folgenden Funktionen realisieren das Ändern einer bestimmten vorzugebenden Eigenschaft (mit ihrem Namen), deren Wert/Einstellung auf eine neue Vorgabe gesetzt werden soll. Die Funktionen sind ausreichend dokumentiert. Die Verwendung der Funktionen erfordert: Imports System.Reflection Hier die betreffenden Funktionen: 1. Die gewünschte Eigenschaft der Controls eines bestimmten Typs auf neuen Wert ändern ''' <summary> ''' Alle Controls des angegebenen Typs im angegebenen Container-Objekt ''' eine bestimmte Eigenschaft mit neuem Wert versehen, ''' wobei auch weitere Container-Controls ''' innerhalb des Container-Objekts berücksichtigt werden können ''' </summary> ''' <param name="oContainer">der Original-Container</param> ''' <param name="refControl">das Referenz-Control (zur Ermittlung des Typs)</param> ''' <param name="thePropName">der Name der zu ändernden Eigenschaft</param> ''' <param name="thePropVal">der neue Eigenschaftenwert</param> ''' <param name="bSubContainerAlso">SubContainer berücksichtigen ja|nein</param> Public Sub setControlsPropVal(oContainer As Control, refControl As Control, thePropName As String, Optional thePropVal As Object = Nothing, Optional bSubContainerAlso As Boolean = True) Dim typ As Type = refControl.GetType Dim PropertyInfo As PropertyInfo If Not IsNothing(oContainer) Then ' alle Controls des Container-Objekts durchlaufen For Each oControl As Control In oContainer.Controls If CtrlPropertyExists(oControl, thePropName) Then 'ist Eigenschaft vorhanden? ' Falls es sich um ein Container-Control handelt und die ' Controls ebenfalls geändert werden sollen, muss ' die Funktion setControls rekursiv erneut aufgerufen werden If bSubContainerAlso AndAlso oControl.Controls.Count > 0 Then setControlsPropVal(oControl, refControl, thePropName, thePropVal) Else ' sofern es sich um ein Control vom Type typ handelt Inhalt ändern If oControl.GetType.Equals(typ) Then PropertyInfo = oControl.GetType().GetProperty(thePropName) PropertyInfo.SetValue(oControl, thePropVal, Nothing) End If End If End If Next End If End Sub 2. Die gewünschte Eigenschaft aller Controls verschiedenen Typs auf neuen Wert ändern ''' <summary> ''' Alle Controls im angegebenen Container-Objekt ''' eine bestimmte Eigenschaft mit neuem Wert versehen, ''' wobei auch weitere Container-Controls ''' innerhalb des Container-Objekts berücksichtigt werden können ''' </summary> ''' <param name="oContainer">der Original-Container</param> ''' <param name="thePropName">der Name der zu ändernden Eigenschaft</param> ''' <param name="thePropVal">der neue Eigenschaftenwert</param> ''' <param name="bSubContainerAlso">SubContainer berücksichtigen ja|nein</param> Public Sub setAllControlsPropVal(oContainer As Control, thePropName As String, Optional thePropVal As Object = Nothing, Optional bSubContainerAlso As Boolean = True) Dim PropertyInfo As PropertyInfo If Not IsNothing(oContainer) Then ' alle Controls des Container-Objekts durchlaufen For Each oControl As Control In oContainer.Controls If CtrlPropertyExists(oControl, thePropName) Then 'ist Eigenschaft vorhanden? ' Falls es sich um ein Container-Control handelt und die ' Controls ebenfalls geändert werden sollen, muss ' die Funktion setControls rekursiv erneut aufgerufen werden If bSubContainerAlso AndAlso oControl.Controls.Count > 0 Then setAllControlsPropVal(oControl, thePropName, thePropVal) Else PropertyInfo = oControl.GetType().GetProperty(thePropName) PropertyInfo.SetValue(oControl, thePropVal, Nothing) End If End If Next End If End Sub 3. Überprüfung, ob ein Control eien bestimmte Eigenschaft besitzt ''' <summary> ''' Prüfen, ob ein Control eine bestimmte Eigenschaft besitzt ''' </summary> ''' <param name="theCtrl">das Control</param> ''' <param name="thePropName">der Name der zu überprüfenden Eigenschaft</param> ''' <returns>True|False</returns> Public Function CtrlPropertyExists(theCtrl As Control, thePropName As String) As Boolean ' Filter erzeugen, der bestimmt, ob eine Eigenschaft mit dem Namen "Text" verfügbar ist, ' dabei wird die Gross-und-Kleinschreibung ignoriert Dim filter As Reflection.MemberFilter _ = Function(member As Reflection.MemberInfo, criteria As Object) _ (member.Name.Equals(thePropName, StringComparison.InvariantCultureIgnoreCase)) ' nur Eigenschaften, die sowohl öffentlich als auch nicht statisch sind, zulassen Dim flags As Reflection.BindingFlags _ = Reflection.BindingFlags.Public Or Reflection.BindingFlags.Instance ' keine Kriterien (filterCriteria) nötig --> Der Parameter ist Nothing Dim members() As Reflection.MemberInfo _ = GetType(Control).FindMembers(Reflection.MemberTypes.Property, flags, filter, Nothing) ' existiert eine Eigenschaft mit dem Namen thePropName? Return (members.Length > 0) End Function Die Funktionen realisieren auch, dass Controls in einem bestimmten Container sich befinden können, eventuell sogar auch in weiteren Containern. Beispiel des Aufrufs: setAllControlsPropVal(SplitContainer1.Panel1, "Font", Font) Dieser Tipp wurde bereits 1.984 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |