Adaptation d'un code Pour repositionner les composants d'une fenêtre sur Visual Basic .NET
Le code repositionne les composants de la fenêtre en se servant de leur positionne initiale (mise en mémoire par l'appel d'une procédure dans le "Load" de la "Form"). La grosseur des composantes et des caractères sont proportionnel à la grandeur de la fenêtre. Correction des problèmes relié au texte (Oui, il grossi la grosseur des polices). Le code supporte les "Panels", "GroupBox" et autres. Le code a été testé avec Windows XP et Windows Vista (il supporte les nouveau Bouton, GroupBox et RadioButton de Vista+Aero).
Le fonctionnement du code reste simple. Inclure le document vb dans votre projet. Dans la procédure "Load" de votre formulaire, inscrire "LoadArray_WindowResize(Me)". "Me" étant interprêter comme un "Windows.Forms.Control". Dans la procédure "Resize", inscrire "Set_WindowResize(Me)". C'est tout !!!
Source / Exemple :
Module WindowResizeV2
Dim ArrayOfObject(0) As TableauWindowsResize
Dim CORR As Single = 7.5
Dim Compteur As Integer = 0
Private Structure TableauWindowsResize
Dim ObjectName As String
Dim RatioTop As Single
Dim RatioLeft As Single
Dim RatioHeigth As Single
Dim RatioWidth As Single
Dim FontRatio As Single
Dim Parent As String
Dim FlagAvecBordure As Boolean
End Structure
Public Sub LoadArray_WindowResize(ByVal FormToTreat As Windows.Forms.Control)
' Fonction qui rempli le tableau avec tous les composants de la fenetre
Dim Composant As Windows.Forms.Control
'eviter de remplir le tableau 2 fois
ReDim Preserve ArrayOfObject(Compteur)
For Each Composant In FormToTreat.Controls 'WindowResize_V1.Form1
If Not Composant.Name = "" Then 'Pour ne pas prendre l'intérieur d'un application MDI
Compteur += 1
ReDim Preserve ArrayOfObject(Compteur)
ArrayOfObject(Compteur).ObjectName = Composant.Name
ArrayOfObject(Compteur).RatioHeigth = CSng(Composant.Bounds.Height / Composant.Parent.ClientSize.Height)
ArrayOfObject(Compteur).RatioWidth = CSng(Composant.Bounds.Width / Composant.Parent.ClientSize.Width)
ArrayOfObject(Compteur).RatioTop = CSng(Composant.Bounds.Top / Composant.Parent.ClientSize.Height)
ArrayOfObject(Compteur).RatioLeft = CSng(Composant.Bounds.Left / Composant.Parent.ClientSize.Width)
ArrayOfObject(Compteur).Parent = Composant.Parent.Name
Try
If Composant.Size.Height - Composant.Font.Size > 11 Then
ArrayOfObject(Compteur).FontRatio = CSng(Composant.Font.Size / (Composant.Height - CORR))
ArrayOfObject(Compteur).FlagAvecBordure = True
Else
ArrayOfObject(Compteur).FontRatio = CSng(Composant.Font.Size / Composant.Height)
ArrayOfObject(Compteur).FlagAvecBordure = False
End If
Catch ex As Exception
ArrayOfObject(Compteur).FontRatio = -1
End Try
If Composant.HasChildren = True Then LoadArray_WindowResize(Composant)
End If
Next Composant
End Sub
Public Sub Set_WindowResize(ByVal FormToTreat As Windows.Forms.Control)
Dim Compteur As Integer = 0
Dim x, y, wi, he As Int32
For Compteur = 1 To ArrayOfObject.Length - 1
If FormToTreat.Name = ArrayOfObject(Compteur).Parent Then
With FormToTreat.Controls(ArrayOfObject(Compteur).ObjectName)
he = CInt(ArrayOfObject(Compteur).RatioHeigth * .Parent.ClientSize.Height)
wi = CInt(ArrayOfObject(Compteur).RatioWidth * .Parent.ClientSize.Width)
y = CInt(ArrayOfObject(Compteur).RatioTop * .Parent.ClientSize.Height)
x = CInt(ArrayOfObject(Compteur).RatioLeft * .Parent.ClientSize.Width)
Try
If ArrayOfObject(Compteur).FlagAvecBordure = True Then
If Not ArrayOfObject(Compteur).FontRatio = -1 Then .Font = New Drawing.Font(.Font.FontFamily,_
CSng((he - CORR) * ArrayOfObject(Compteur).FontRatio))
Else
If Not ArrayOfObject(Compteur).FontRatio = -1 Then .Font = New Drawing.Font(.Font.FontFamily,_
CSng(he * ArrayOfObject(Compteur).FontRatio))
End If
Catch ES As Exception
End Try
.SetBounds(x, y, wi, he)
If .HasChildren Then Set_WindowResize(FormToTreat.Controls(ArrayOfObject(Compteur).ObjectName))
End With
End If
Next Compteur
End Sub
End Module
Conclusion :
Je suis ouvert à toutes modifications au sujet de la performance du module.
Contacter moi s'il y a des bugs, j'aimerais pour les corrgier le plus rapidement possible. Le code va servir dans une entreprise (environ 10 personnes vont utiliser le programme) et j'aimerais que les "gadgets" soit sans problèmes.
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.