begin process at 2012 02 16 06:19:16
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > FORM/WINDOW RESIZE

FORM/WINDOW RESIZE


 Information sur la source

Note :
Aucune note
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 :8 947

Auteur : destroy80

Ecrire un message privé
Commentaire sur cette source (9)
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.


 Historique

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

 Sources de la même categorie

Source .NET (Dotnet) MODIFICATION DATE DE WINDOWS EN VB.NET ET VBA par us_30
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI DE MAIL AVEC PIÈCE JOINTE par EhJoe
Source .NET (Dotnet) AMUSONS NOUS AVEC UN LABEL ^^ par Adn56
Source avec Zip Source avec une capture Source .NET (Dotnet) UN NAVIGATEUR INTERNET EN VB.NET par azrti
Source avec Zip Source .NET (Dotnet) CONVERSION DE DEVISE MONAITAIRE VIA UN SERVICE WEB par bigmonkey7

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) REDIM' PHOT par dheroux
Source avec Zip Source avec une capture Source .NET (Dotnet) TRACKBARPLUS , UN CONTROLE PERSONNALISÉ REDIMENTIONABLE AVEC... par spoty
Source avec Zip Source avec une capture ANCRAGE DES CONTRÔLES SANS API, OCX, DLL... par robin42p
Source avec Zip Source avec une capture Source .NET (Dotnet) REDIMENSIONNER LES COLONNES D'UN CONTRÔLE DATAGRID D'APRÈS S... par chris_brabant
Source avec Zip Source .NET (Dotnet) REDIMENSIONNEMENT AUTOMATIQUE DU CONTENU D'UN FORM EN VB.NET par chris_brabant

Commentaires et avis

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.

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"

Commentaire de jym le 20/08/2007 09:57:06

merci pour ce code bien utile.

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

Commentaire de turpin2008 le 24/01/2009 14:50:42

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

Commentaire de turpin2008 le 24/01/2009 15:42:37

Je n'arrive pas a introduire le code dans mon application

Commentaire de walidAyariIsg le 29/09/2010 02:01:04

Merci bien c'est très utile je vous souhaite une bonne continuation

Commentaire de walid888 le 29/12/2010 22:52:02

Merci très bien ce code une autre fois merci

Commentaire de Keitarokun le 12/08/2011 11:04:55

code sympa et facile a utilisé, merci !!!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

empêcher le redimensionnement d'un fenêtre [ par drublic ] salut,j'aimerais, que lorsque la fenêtre de mon programme s'affiche, l'on ne puisse pas avec la sourie la redimenssionner.ou alors comment fait on pou empêcher le redimensionnement d'un fenêtre [ par drublic ] salut,j'aimerais, que lorsque la fenêtre de mon programme s'affiche, l'on ne puisse pas avec la sourie la redimenssionner.ou alors comment fait on pou PB REDIMENSIONNEMENT FEUILLE [ par hlt ] Après avoir exécuté word à patir de visual, le document word precharge des données.Entre temps je reduit la feuille principal(elle est iconifiée dans recadrage et resize d'une image jpg [ par benthi ] est il possible, à partir de VB6, de lancer la commande de recadrage puis la commande de resize sur une image jpg situé dans un répertoire précis. empecher le redimensionnement d'une feuille [ par darkyoda ] salut a vous,compagons developpeurs!comment empecher un utilisateur de redimensionner une feuille et commentdésactiver les boutons réduire,restaurer e form1_resize() [ par rodo22 ] Bonjour,Comment peut-on avec la commande form_resize() faire en sorte que les contrôles qui se trouvent sur la feuille soient redimensionnés en même t Redimensionnement de la form [ par Le NeWbIe ] Quelqu'un pourrait me dire comment avoir le bouton minimiser sur ma form mais désactiver le bouton agrandir?Par exemple la calculette windows est faît redimensionnement d'un contrôle [ par brisky ] salut à tous,j'aimerais savoir comment redimentionner un treeview et un listview à l'exécution. comme dans l'explorateur windows, quand on se met entr Form_Resize avec Frame? [ par jia2812 ] Slt les progs'Walla, cé pô compliqué mon pb... Je veux faire 1 évent Resize que vous connaissez évidemment... Seulement le pb, cé que si les contrôles Resize MDI Form [ par denis ] Bonjour,Est-il possible d'interdire le "Resize manuel" d'une feuille MDI : je souhaiterais ne disposer que des fonctions Maximize et minimize à partir


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,686 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales