begin process at 2010 02 10 16:39:39
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Control

 > REDIMENSIONNEMENT AUTOMATIQUE DU CONTENU D'UN FORM EN VB.NET

REDIMENSIONNEMENT AUTOMATIQUE DU CONTENU D'UN FORM EN VB.NET


 Information sur la source

Note :
9 / 10 - par 8 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Control Source .NET ( DotNet ) Classé sous :form, resize, redimensionnement, redim Niveau :Initié Date de création :20/02/2006 Vu / téléchargé :12 241 / 1 755

Auteur : chris_brabant

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Je me suis inspiré d'un code déposé en CSharp.NET par "bestmomo" (http://www.csharpfr.com/code.aspx?ID=33792), que j'ai transcrit en VB.NET, un peu amélioré, et surtout dans lequel j'ai corrigé un bug qui m'a fait tourner en bourrique pendant un moment.

Pour ceux qui iront fouiner dans le code
========================================

La version de "bestmomo" est basée sur la mémorisation (dans un tableau unidimensionnel de structures) des tailles, positions et fonts de la liste des controles contenus dans la Form, ainsi que de leurs conteneurs respectifs. Cela se fait par balayage, grâce à une fonction récursive, de l'arborescence des controles.

Ensuite, lorsque le Resize est demandé, l'arborescence de controles est à nouveau balayée, et l'ancienne taille stockée dans le tableau de structures est modifiée (augmentée ou diminuée) suivant la nouvelle taille de la Form.

Or je me suis aperçu, sur un exemple de Form contenant près de 200 controles, que l'arborescence des controles n'est pas forcément balayée dans le même ordre à deux instants très proches l'un de l'autre. D'où un décalage qui fait que les contrôles sont redimensionnés n'importe comment.

D'autre part, il y a un problème si la Form contient un DataGrid, car un Datagrid peut contenir lui-même des contrôles (TextBox, CheckBox, ou autre). Ma classe 'Resize' s'arrête au niveau de la Datagrid elle-même, sans tenir compte des éventuels contrôles qu'elle contiendrait.

La méthode 'DoResize' possède un argument vrai/faux qui permet d'adapter la taille de la police de chaque contrôle (sauf les Datagrids), et un autre argument qui permet d'affecter un coefficient multiplicateur à la police contenue dans les Datagrids, mais cette dernière fonctionnalité n'est pas au point. Mettre ce dernier à 0 pour l'ignorer.

J'ai fait des tests sur une Form contenant environ 200 contrôles (dont une dizaine de Datagrids), des panels, des groupBox, et conteneurs divers, répartis sur 5 onglets, pas de problèmes. Par contre, avec une telle quantité de controles, ca pédale un peu.

Sur un exemple plus simple tel que celui contenu dans le ZIP, ca marche nickel.

Voilà, I hope this will help you !



 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) GARDER LA SÉLECTION DANS UN DATAGRID APRÈS LE TRI SUR UNE CO...
Source avec Zip Source avec une capture Source .NET (Dotnet) CLASSES PERMETTANT DE FAIRE "CLIGNOTER" LES COLONNES D'UN DA...
Source avec Zip Source avec une capture Source .NET (Dotnet) REDIMENSIONNER LES COLONNES D'UN CONTRÔLE DATAGRID D'APRÈS S...
Source .NET (Dotnet) FONCTION POUR METTRE UN COMBOBOX EN READONLY SANS METTRE EXP...
Source .NET (Dotnet) CONTRÔLE CHECKBOX AVEC UNE PROPRIÉTÉ READONLY - VALABLE AUSS...

 Sources de la même categorie

Source avec une capture Source .NET (Dotnet) CREATION DE CONTROLS DYNAMIQUE + DEPLACEMENT ET REDIMENTION ... par tresorsdevie
Source avec Zip Source avec une capture USERCONTROL AVEC PROPERTIES PERSONALISABLE par Polack77
Source avec Zip Source avec une capture BOUTON UP_DOWN par epson1
Source avec Zip Source avec une capture CONTROLS ++(CONTROLS GRAPHIQUES EN CONSTRUCTION) par Flocreate
Source avec Zip Source .NET (Dotnet) CRÉER UN VRAI OCX EN DOTNET par Patrice99

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) JEU PENDU (WIN FORM) par ahmed402
Source .NET (Dotnet) BACKGROUNDWORKER RAFRAÎCHISSEMENT DU FORMULAIRE PENDANT LA T... par fifrelin70
Source .NET (Dotnet) FORM/WINDOW RESIZE par destroy80
Source avec Zip Source avec une capture ANCRAGE DES CONTRÔLES SANS API, OCX, DLL... par robin42p
Source avec Zip RESIZE UNE FORM SANS CLIGNOTEMENT MOCHE par LuTo

Commentaires et avis

Commentaire de scortex84 le 20/02/2006 18:38:30

Hello.
C'est pas mal, le ptit plus c'est le redimensionnement des polices (qui marche pas terrible chez moi...).

Je veux pas faire mon rabajoie, mais en utilisant les encres (proprieté anchor des composants), on arrive au meme résultat...

Remarquez moi j'avais codé des lignes et des lignes de codes il y a quelques années tout ça pour découvrir que "instr" faisait la meme chose... ;-) On en apprend tous les jours !

Bonne programmation à toutes (y'en a ?) et à tous !
Seb.

Commentaire de chris_brabant le 21/02/2006 11:10:31

j'aimerais bien que tu me montres un exemple de Form COMPLEXE, c'est à dire avec des onglets, avec des Panels, des GroupBoxes, des DataGrids, etc.... et dont le redimensionnement fonctionne nickel avec les Anchor, ca m'intéresse. Dans mon cas, j'ai 5 onglets, avec au total environ 200 contôles...

J'ai trouvé des exemples sur Internet, mais d'une part, il faut bidouiller avec le Concepteur du projet, ce qui n'est pas génial, l'ORDRE dans lequel on positionne les Anchor sur les objets est apparemment important, et de plus, si tu décides pour une raison X ou Y de rajouter un Conteneur en plein milieu de ta Form, ca chamboule toute l'interaction entre les Anchor. Il faut alors tout reprendre à zéro pour prendre en compte le conteneur ajouté.

qu'en penses-tu ?

Commentaire de scortex84 le 21/02/2006 14:13:18

Hello,
J'ai l'impression que tu as mal pris ma critique. Je ne voulais pas te vexer, tu as fait du bon boulot !

Perso je n'ai pas de form aussi complexe que la tienne (elle met combien de temps à se charger ? 30 secondes ?!), mais j'utilise les encres sur des forms pas mal complexes tout de meme (comme toi plusieurs onglets, etc, etc). Et entre les panels, les onglets, et tous les conteneurs qui existent je m'en sors bien. Evidement, il faut pour chaque control définir l'encre dans le concepteur, ce qui peut etre galère quand on en a 200 (200?! wahou j'en reviens pas...). Par contre le fait d'ajouter un conteneur, ou meme l'ordre dans lequel tu définis les encres n'influe en rien sur la mise en page.
Par contre je voudrais savoir une chose : pour tes onglets, tu utilises des "tabcontrol" ? Si oui, rencontres-tu le fameux bug de la réorganisation des tabs aléatoirement (bug référencé par microsoft, sans aucun correctif à priori) ? Ou as-tu trouvé une solution ?
Seb.

Commentaire de chris_brabant le 21/02/2006 22:56:59

non non, je n'ai pas mal pris ta critique qui n'en est pas vraiment une en plus...
simplement je ne vois pas comment utiliser les Anchor dans mon cas.

Pour ce qui est de la quantité de controles, pour une interface de base de données ou il y a des masques de saisie avec pas mal de champs, les 200 controles sont vite atteints (textBox, Combobox, Labels pour chaque champ)

J'utilise bien les tabControls, mais je n'ai pas constaté de bug particulier. Quel est ce bug exactement ?

Chris

Commentaire de scortex84 le 22/02/2006 10:28:19

Re
Le bug fait que le tabcontrol change l'ordre des tabs aléatoirement. Autant tu vas ouvrir le concepteur 10 fois sans aucun soucis, puis la 11 ieme fois, toutes les tabs vont changer de sens. Ca agace !

Voilou !
Seb.

Commentaire de chris_brabant le 23/02/2006 14:08:17

ah oui, je vois c'est en effet très pénible, mais j'en ai pris mon parti maintenant.

Commentaire de amsa44 le 07/04/2006 20:59:57

salam comment va je te remercie et te felicite

Commentaire de MoiDebutantVB le 01/05/2006 15:57:30

Contre le prob de tabescontrols qui changent de place tu peux n'ajouter les Tabs qu'au moment du form_load en les mettant dasn l'ordre exemple :
Me.TabStrip.Controls.Add(Me.Tab1) 1er
Me.TabStrip.Controls.Add(Me.Tab2) 2è
Me.TabStrip.Controls.Add(Me.Tab3) 3è
Me.TabStrip.Controls.Add(Me.Tab4) 4è

Commentaire de LeWolf le 10/09/2006 08:42:33

Super source,
Mais le resize n'aime pas trop mes listbox.
Après réduction de la feuille et réagrandissement pfuit ....

Sinon super boulot

Commentaire de capuccino_fr le 25/09/2006 16:03:17

Et ben voila c'est tres bon
2 minutes et j'ai tout compris, ca fonctionne du 1er coup. Magique !!
Merci man, 10/10

@++

Commentaire de swan94 le 06/10/2006 11:38:47

Bravo et merci de fournir une telle source.

Cependant, une question : Comment faire quand tu créée des contrôles dynamiquement ?

Merci à toi

Commentaire de thepoe le 25/10/2006 15:45:17

Salut à tous.

en .net, il suffit d'organiser sa form avec des tableaux et la propriété dock des objets en fill, les redimensionnement se font tout seul.

Bonne continuation

Commentaire de capuccino_fr le 26/10/2006 11:33:01

Problème: quand je réduis la fenêtre, et que je la rends visible de nouveau. J'ai cette fenêtre mais  avec juste le coin haut gauche. On a l'impression d'un zoom sur un carré en haut à gauche de la fentre... Est-ce déjà arrivé à quelqu'un ?

Commentaire de bidouille007 le 28/10/2009 08:31:48

Bien dommage que cette source ne fonctionne pas en VB NET 2008. snif

Commentaire de SgtKabukinan le 02/12/2009 14:15:09 8/10

Si si ça marche très bien après import sous Visual Studio 2008

Par contre il ne faut absolument pas réduire la fenêtre dans la barre des taches puis la réafficher.

En tout cas très bon code, je vais essayer de voir ou est le problème.
bon alors

j'ai rajouté une propriété à ta classe :
Public lastFormState As Windows.Forms.FormWindowState

et ensuite dans le resize :

If Me.WindowState <> Windows.Forms.FormWindowState.Minimized And Me.Created And Me.IsHandleCreated And formSizer.lastFormState <> FormWindowState.Minimized Then
                ' mettre False dans DoResize pour que les polices gardent leur taille initiale
                formSizer.DoResize(Me, True, facteur_redim_datagrids)
            End If
            If formSizer.lastFormState = FormWindowState.Minimized Then
                formSizer.InitResize(Me)
            End If
            formSizer.lastFormState = Me.WindowState

et j'ai supprimé le code dans l'évènement size_changed.

Et je n'ai plus ce problème.

Bon coding à tous

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

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 Bloquer la taille minimale d'une form [ par Darkukai ] Bonjour tout le mondej'aurais aimer savoir si on pouvait bloquer la propriété resize d'une form si celle si atteint une taille trop petitej'aimerais l 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 REDIMENSIONNER UNE LISTVIEW SUR FORM_RESIZE [ par kaiser95 ] Bah le sujet du message est clair....Je sais pas comment faire pour que ma listview soit tt le temps a la taille maximum possible dans la fenetre...je decharger une form dans un resize [ par agatha ] Comment peut on decharger une form dans son resize (Me.WindowState = 1)Merci Resize une form [ par Tetris42 ] Salut en fait j ai besoin de resize une form et son contenu (Champs etc ..) par rapport a la taille de l ecran .Merci redimensionnement automatique du form suivant la taille de l'ecran [ par chris81 ] comment fait on pour redimensionner un form suivant la taille de l'ecran en vb.netmerci Interdire le redimensionnement d'un Form Access [ par alexsimps2002 ] Bonjour VbFrance,Je suis encore sur une appli Access et j'ai mis au demarrage de l'application un petit formulaire qui me sert de fond d'ecran. J'aime Pb de redimensionnement au form_load (sstab) [ par zeguizmo ] Salut tout le monde, J'ai un probleme de redimensionnement d'un controle sstab au lancement de ma form, je m'explique : Je lance ma form en maximi questions resize d'une form et login/passW [ par AsselusBorealiss ] Bonjour /bonsoirJ?ai 2 questionsLa 1ere :J?ai une form avec plusieurs images de différentes tailles et je voudrais ?quand la form s?affiche à l?écran


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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 : 1,154 sec (4)

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