web-dev-qa-db-fra.com

Comment redimensionner et ajuster automatiquement les contrôles de formulaire avec un changement de résolution

J'ai remarqué que certaines applications modifiaient leur position de contrôle pour les ajuster autant que possible dans la résolution. Si la fenêtre est maximisée, elles se règlent de manière à ce que, dans l'ensemble, l'interface graphique ait l'air équilibrée. possible de créer ou d’implémenter cette fonctionnalité dans Visual studio 2010 C #?

41
Afnan Bashir

Utilisez Dock et Anchor properties. Ici est un bon article. Notez que ceux-ci gèrent les changements lors de la maximisation/minimisation. C'est un peu différent que si la résolution de l'écran change, mais ce sera la même idée.

61
SwDevMan81

Utilisez des combinaisons de celles-ci pour obtenir le résultat souhaité:

  1. Définissez la propriété Anchor sur Aucune, les contrôles ne seront pas redimensionnés, ils ne font que déplacer leur position.

  2. Définissez la propriété Anchor sur Top + Bottom + Left + Right, les contrôles seront redimensionnés mais ils ne changeront pas leur position.

  3. Définissez le Minimum Size du formulaire sur une valeur appropriée.

  4. Définissez la propriété Dock.

  5. Utilisez l'événement Form Resize pour changer ce que vous voulez

Je ne sais pas comment la taille de la police (étiquette, zone de texte, liste déroulante, etc.) sera affectée dans (1) - (4), mais elle peut être contrôlée dans (5).

18
Bhaskar
float widthRatio = Screen.PrimaryScreen.Bounds.Width / 1280;
float heightRatio = Screen.PrimaryScreen.Bounds.Height / 800f;
SizeF scale = new SizeF(widthRatio, heightRatio);
this.Scale(scale);
foreach (Control control in this.Controls)
{
control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
9
Mohammad Shahnawaz

..et pour détecter un changement de résolution afin de le gérer (une fois que vous utilisez l'amarrage et l'ancrage comme suggéré par SwDevMan81), utilisez l'événement SystemEvents.DisplaySettingsChanged in Microsoft.Win32 .

2
Thushan Fernando

dans l'événement de chargement de formulaire, ajoutez cette ligne

this.WindowState = FormWindowState.Maximized;
0
soldiershin