2008-09-18 12 views
1

Ce que j'essaye d'accomplir est un formulaire qui a un bouton qui fait que le formulaire soit «déroulant» et devienne plus grand, affichant plus d'information. Ma tentative actuelle est la suivante:Comment limiter la hauteur d'un Sytem.Windows.Form à une valeur exacte?

private void btnExpand_Click(object sender, EventArgs e) 
{ 
    if (btnExpand.Text == ">") 
    { 
     btnExpand.Text = "<"; 
     _expanded = true; 
     this.MinimumSize = new Size(1, 300); 
     this.MaximumSize = new Size(int.MaxValue, 300); 
    } 
    else 
    { 
     btnExpand.Text = ">"; 
     _expanded = false; 
     this.MinimumSize = new Size(1, 104); 
     this.MaximumSize = new Size(int.MaxValue, 104); 
    } 
} 

Qui fonctionne très bien! Sauf pour un petit détail ... Notez que les valeurs de largeur sont supposées pouvoir aller de 1 à int.MaxValue? Eh bien, en pratique, ils vont de this.Width à int.MaxValue, à savoir. vous pouvez rendre le formulaire plus grand, mais jamais plus petit. Je ne sais pas pourquoi cela se produirait. Quelqu'un a des idées? Pour l'enregistrement: J'ai également essayé un gestionnaire Form.Resize qui définissait la Hauteur du formulaire à la même valeur en fonction de la valeur de l'extension boolean _expanded, mais j'ai fini par avoir le même effet secondaire. PS: J'utilise .NET 3.5 dans Visual Studio 2008. D'autres solutions sont les bienvenues, mais c'est ce que je pensais de la façon dont cela «devrait» être fait et comment j'ai essayé de le faire. Editer: Semble que le code fonctionne, selon la réponse aux réponses acceptées. Si quelqu'un d'autre a des problèmes avec ce problème particulier, vérifiez la propriété AutoSize de votre formulaire, elle devrait être FAUX, pas VRAI. (Ceci est la valeur par défaut, mais je l'ai activé car j'utilisais le formulaire et une étiquette avec autosize également pour afficher les informations de débogage plus tôt)

Répondre

1

Selon les docs, utilisez 0 pour indiquer aucune taille maximale ou minimale . Tho, je l'ai juste essayé et il n'a pas aimé 0 du tout. J'ai donc utilisé int.MaxValue comme vous l'avez fait et cela a fonctionné. Quelle version du framework que vous utilisez?

+0

Pour une raison quelconque AutoSize a été mis à vrai sur le formulaire et qui interférait avec le MaximumSize et MinimumSize ... Huh. de toute façon :) –

+0

Bien sûr, non problème. =) –

+0

En tant que sidenote supplémentaire, je crois que cela signifie d'utiliser ie. new Size (0, 0) pour représenter no min/max, mais je ne pense pas que le code ait été conçu pour gérer les valeurs 0 individuelles. Dommage, mais voilà. –

0

En fait, en regardant les réflecteurs MinimumSize et MaximumSize (.NET 3.5), il est clair que le comportement n'est pas tout à fait le même que celui suggéré par les docs. Il y a des contraintes de largeur minimale déterminée à partir d'une classe d'aide et 0 n'a pas de signification particulière (pas de limite.

Une autre note, je vois dans votre code ci-dessus que vous accroît ou en fonction de la valeur de texte de votre bouton, c'est une mauvaise idée, si quelqu'un arrive plus tard et change le texte dans le concepteur de dire, "Expand" au lieu de < sans regarder votre code, il aura alors un effet secondaire inattendu, probablement vous avez du code quelque part qui change le le texte du bouton, il serait préférable d'avoir une variable d'état quelque part et de l'allumer

+0

Le fait qu'il existe déjà une variable d'état sert uniquement à mettre cela en évidence. Merci. Mais ils auront toujours besoin de regarder mon code quand ils commenceront à cliquer sur le bouton et cela chamboulera leurs propres changements dans le texte des boutons. –

Questions connexes