Form/window resize

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 425 fois - Téléchargée 20 fois

Contenu du snippet

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.

A voir également

Ajouter un commentaire Commentaires
Messages postés
11
Date d'inscription
samedi 7 août 2010
Statut
Membre
Dernière intervention
11 avril 2013

code sympa et facile a utilisé, merci !!!
Messages postés
2
Date d'inscription
dimanche 25 juillet 2010
Statut
Membre
Dernière intervention
29 décembre 2010

Merci très bien ce code une autre fois merci
Messages postés
2
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
29 septembre 2010

Merci bien c'est très utile je vous souhaite une bonne continuation
Messages postés
15
Date d'inscription
mercredi 10 décembre 2008
Statut
Membre
Dernière intervention
16 février 2010

Je n'arrive pas a introduire le code dans mon application
Messages postés
15
Date d'inscription
mercredi 10 décembre 2008
Statut
Membre
Dernière intervention
16 février 2010

ce code est intéressant.J'aimerai bien avoir d'ample informations sur la méthode d'utilisation
Afficher les 9 commentaires

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.