Mon formulaire Windows continue à réduire / redimensionner à la construction

Je travaille sur un projet Windows Forms. Il contient un contrôleur à tabs avec plusieurs pages et plusieurs contrôles sur chacun.

Il semble que relativement récemment, après quelques modifications de formulaire, chaque fois que je construis et exécute la solution, le formulaire se redimensionne / diminue.

Donc, si je règle la taille de la forme à 768, une fois que je clique sur “Démarrer” pour la construire et l’exécuter, je peux en avoir un aperçu tout en se redimensionnant lui-même pendant le processus, puis le formulaire charge 21 pixels de moins que la hauteur c’était à construire pour.

Si je continue ensuite à construire et à exécuter mon projet, le formulaire diminuera de 21 pixels à chaque fois, le rendant de plus en plus petit à chaque génération.

Nous pensons qu’il a peut-être été introduit lorsque nous avons ajouté le contrôleur ‘DataGridView’ à l’un des tabs, mais nous devons encore prouver si c’est le cas.

Y a-t-il une raison pour que cela se produise et qu’est-ce qui pourrait le faire? Pourquoi se redimensionnerait-il pendant l’exécution?

C’est un bug ennuyant, et j’ai moi-même subi un comportement similaire. Cependant, il existe peut-être quelques solutions de contournement, mais soyez averti, elles peuvent ou non aider et sonner un peu hacky.

Solution 1

Si votre contrôle n’est pas amarré, l’amarrage peut vous aider.

Solution 2

Vous pourrez peut-être modifier vos parameters DPI pour éliminer le problème, par exemple:

Propriétés d’affichage → onglet ParamètresAvancé . Dans la boîte de dialog Avancé, j’ai changé les “Paramètres DPI” de Grand (120 dpi) à Normal (96 dpi).

Solution 3

Ceci est peut-être dû à la propriété AutoScaleMode. Vos formulaires ont peut-être été conçus avec des parameters DPI ou de police différents de ceux que vous avez maintenant dans les parameters d’affichage Windows. Essayez de définir la propriété AutoScaleMode sur Aucune dans votre formulaire et les contrôles incriminés. Ils ne seront plus redimensionnés automatiquement.

Le problème

Apparemment, il y a un bogue dans Visual Studio 2015. Il ne calcule pas correctement la Size lorsque certaines conditions sont réunies. Dans mon cas, j’utilisais ce qui suit …

 (Name): Form1 AutoScaleMode: Font AutoSizeMode: GrowOnly DoubleBuffered: True Font: Verdana, 8.25pt FormBorderStyle: FixedDialog Icon: (Icon) MaximizeBox: False MinimizeBox: False MinimumSize: 600, 170 Size: 600, 170 StartPosition: CenterParent Text: MyTitle 

Maintenant … Si vous fermez ce formulaire et le rouvrez, sa Size est toujours identique (600, 170) . Si vous modifiez la propriété suivante …

 ControlBox: False 

Ensuite, vous fermez le formulaire et ouvrez-le de nouveau. Vous remarquerez que la Size a été remplacée par (610, 203) .

Je suppose que le bogue ne tient pas compte de deux choses. L’une serait la barre de titre du formulaire HEIGHT. L’autre serait l’icône de la barre de titre WIDTH. Ce serait le décalage d’une WIDTH of 10 pixels et d’une HEIGHT of 33 pixels.

La solution

En fait, vous avez trois solutions de contournement. L’une serait de compenser le MinimumSize . Une autre serait de montrer réellement le ControlBox . La dernière solution consisterait à résoudre le problème dans le code en définissant la propriété ControlBox après l’initialisation du formulaire.

MinimumSize la MinimumSize :

Donc, la première option serait de compenser ce que vous voulez que le MinimumSize soit (w: 10, h: 33) . Ainsi, par exemple, si vous souhaitez que MinimumSize soit (600, 170), vous devez le définir sur (590, 137) . Cela produirait réellement la taille que vous espérez voir.

Affichage de la ControlBox :

Il suffit de changer la propriété suivante …

 ControlBox: True 

Corriger le problème avec le code:

Vous devrez modifier la propriété suivante au moment du design …

 ControlBox: True 

Ensuite, vous devrez définir la propriété ControlBox sur False après l’initialisation du formulaire.

 public Form1() { InitializeComponent(); this.ControlBox = false; } 

J’ai eu le même problème. Ma solution:

Le système de mon PC est Windows 10. La résolution de l’écran était de 125% et je l’ai réglée à 100%. Ensuite, je définis la taille du formulaire, pas changé.

Vous pouvez voir les parameters de résolution dans cette image:

Paramètres de résolution

En turc, “Scale” est “Ölçekle”. Il y a des options de résolution sur le fond (“ölçekle ve düzenle”).

Je l’ai compris!

Si vous cliquez sur le formulaire dans “Mode Création”“Propriétés”“MinimizeBox” et remplacez “Vrai” par “Faux” .

OK, d’abord en réponse aux solutions suggérées par Saruman.

  1. Aucun des contrôleurs de l’application où les valeurs étaient ancrées. Quelques-uns étaient ancrés, mais aucun ne semblait être amarré. J’ai amarré quelques-uns des principaux conteneurs que j’ai pu trouver et cela n’a pas semblé faire beaucoup de différence. Certes, je n’ai pas ancré chaque contrôleur, mais je suis ensuite passé à la solution 2 …

  2. Je ne savais pas où trouver les parameters DPI. Que ce soit dans Visual Studio ou sur ma machine. Alors je suis passé à la solution 3 proposée …

  3. Sur le formulaire d’initialisation, j’ai ajouté ‘this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;’. Cela semblait alors le placer automatiquement au-dessus d’une méthode ‘this.ClientSize = new System.Drawing.Size (11264,730)’, ce qui a piqué mon intérêt.

    Avec un peu plus de débogage, il apparaît que lorsque l’application est générée et initialisée, la propriété ‘this.ClientSize’ est déjà définie sur un niveau très bas, plus ou moins, ‘230×200’. Je ne sais pas exactement d’où provient cette valeur, mais je me demande si cela a quelque chose à voir avec le redimensionnement initial avant qu’il ne tente ensuite de le redéfinir à une valeur supérieure …

Quoi qu’il en soit, je suis tombé sur une autre suggestion de vérifier éventuellement les propriétés de largeur et de hauteur minimales de mon formulaire et j’ai remarqué qu’elles étaient définies sur 0x0, ce que je suppose par défaut.

Donc, je règle les valeurs minimales sur la même taille que la taille de mon formulaire et, lors des versions ultérieures, il semble conserver sa taille maintenant! Ou du moins, cela ne diminue plus ce que je peux dire.

Je ne suis pas sûr que définir la taille minimale du formulaire soit une solution acceptable pour ce comportement bizarre, mais jusqu’à présent, il semble que la taille de l’application rest cohérente sur chaque génération que nous effectuons, ce qui est un soulagement pour le moment.

Si quelqu’un a d’autres connaissances sur la propriété ClientSize et si j’ai raison de me préoccuper de sa petite taille initiale, ce serait bien de l’entendre. 🙂

  1. Copiez les valeurs de la taille de votre formulaire.
  2. Dépassez-le dans les propriétés Minimum et Maximum Size.
  3. Prendre plaisir