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 2.326 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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Januar 2025 Dieter Otter Zeilen einer MultiLine-TextBox ermitteln (VB.NET) Dieser Zipp zeigt, wie man die Zeilen einer MultiLine-TextBox exakt so ermitteln kann, wie diese auch in der TextBox dargestellt werden. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |