begin process at 2008 09 06 20:31:07
1 237 953 membres
335 nouveaux aujourd'hui
14 314 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FORM/WINDOW RESIZE


Information sur la source

Catégorie :VB.NET Source .NET ( DotNet ) Classé sous : windowresize, redimensionnement, resize Niveau : Initié Date de création : 16/08/2007 Date de mise à jour : 05/09/2007 13:23:12 Vu : 5 530

Note :
Aucune note

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

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

  • 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
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.
16 août 2007 21:45:58 :
Suppression d'une ligne de code que je me servait pour le debug et le correction des grandeurs des polices dans un textbox
05 septembre 2007 13:23:12 :
Modification de la fonction LoadArray_WindowResize(). J'ai trouvé un bug quand je travail avec une application MDI. Le centre de l'application devenait un object sans nom !!!. J'ai rajouté une ligne qui filtre cet object. Le centre ed l'application MDI s'agrandit quand même sur le reste du MainForm sans causé de problème
  • signaler à un administrateur
    Commentaire de fdalban le 16/08/2007 23:32:07

    Interessant comme code, cepandant, il y a une erreur a la ligne 54: le FormToTreat.Controls demande l'index et non pas le nom du control. J'ai donc remplacer FormToTreat.Controls(ArrayOfObject(Compteur).ObjectName) par FormToTreat.Controls(Compteur - 1).
    Je ne suis pas specialiste, mais ainsi je n'ai plus d'erreur.

    Bonne continuation.

  • signaler à un administrateur
    Commentaire de forchi le 17/08/2007 12:35:24

    J'ai eu effectivement la même erreur que Fdalban, plus :

    -ligne 70:  If .HasChildren Then Set_WindowResize(FormToTreat.Controls(ArrayOfObject(Compteur).ObjectName))
    que j'ai remplacé par FormToTreat.Controls(Compteur - 1)

    -tjs une erreur au redimensionnement de la page:
    sur: With FormToTreat.Controls(Compteur - 1) --> ligne 54 remplacée
    "L'argument spécifié n'était pas dans les limites de la plage des valeurs valides"

  • signaler à un administrateur
    Commentaire de jym le 20/08/2007 09:57:06

    merci pour ce code bien utile.

  • signaler à un administrateur
    Commentaire de OlCa le 16/09/2007 10:21:22

    j'ai résolu mes problèmes de compteur en déplaçant la ligne 25 "Compteur += 1" sous la ligne 43.
    il y avait non-égalité des compteurs de contrôles entre LoadArray_WindowResize et Set_WindowResize.

    j'espère avoir un peu ammélioré cet excellent code

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS