Question

J'aimerais utiliser Segoe UI 9 pt sur Vista et Tahoma 8 pt sur Windows XP/etc.(En fait, je me contenterais de Segoe UI sur les deux, mais mes utilisateurs ne l'ont probablement pas installé.) Mais, ceux-ci étant assez différents, ils gâchent vraiment la mise en page de mes formulaires.Donc...existe-t-il un bon moyen de gérer cela ?

Un exemple:j'ai un Label, avec un espace vide au milieu, dans lequel je place un NumericUpDown contrôle.Si j'utilise Segoe UI, le NumericUpDown est à environ 5 pixels à gauche de l'espace vide, par rapport à lorsque j'utilise Tahoma.C'est une douleur;Je ne sais pas quoi faire ici.

Donc plus précisément, ma question serait :comment puis-je placer des contrôles au milieu d'un espace vide dans mon Labels (ou CheckBoxoui, etc.) ?Le plus généralement :existe-t-il un bon moyen de gérer différentes polices dans Windows Forms ?

Modifier:Je ne pense pas que les gens aient compris la question.je sais comment varier mes polices basé sur le système d'exploitation.Je ne sais juste pas comment gérer les problèmes de mise en page qui en découlent.

Répondre à ajryan, quick_dry:OK, vous comprenez la question.Je suppose que MeasureString pourrait fonctionner, même si je serais intéressé par une exploration plus approfondie de meilleures façons de résoudre ce problème.

Le problème du partage du contrôle est plus évident avec, disons, un CheckBox.Là, si l'utilisateur clique sur la "seconde moitié" du CheckBox (qui serait un Label contrôle, je suppose), le CheckBox ne change pas d'état.

Était-ce utile?

La solution

Il est étrange de devoir disposer un contrôle dans un autre.Vous résolvez peut-être mal un problème en amont.Êtes-vous capable de diviser l'étiquette en deux étiquettes avec le haut entre les deux et peut-être de vous fier à un panneau Windows Forms TableLayout ?

S'il est essentiel d'essayer de positionner en fonction de la taille des polices, vous pouvez utiliser Graphiques.MeasureString("Chaîne avant updown", myLabel.Font)

Si vous recherchez un positionnement de contrôle dépendant de la police, vous devriez probablement retitrer la question.


[modifier] Vous pouvez gérer l'événement click de la partie "seconde moitié" de l'étiquette et modifier l'état de la case à cocher sur cet événement.Cependant, tout cela ressemble à un hack.Quel est le problème résolu par cette étrange disposition des commandes ?Pourquoi avez-vous besoin d'un haut-bas au milieu d'une étiquette ?

Autres conseils

J'appuie l'utilisation de TableLayoutPanel pour les contrôles en ligne sur une seule ligne.

Je définis généralement chaque colonne et la première ligne sur AutoSize et je définis la propriété Dock de chaque contrôle enfant sur Remplir le concepteur.Cela permet à la disposition horizontale de s'afficher correctement.Pour aligner le texte entre les étiquettes/zones de texte, définissez la propriété TextAlign sur MiddleLeft.

Si votre texte passe à la ligne suivante, il n'y a pas de solution simple.Utiliser Graphics.MeasureString/TextRenderer.MeasureText et une logique d'emballage sophistiquée est votre meilleur pari :(

Tout d'abord, vous pouvez savoir quelle version de Windows vous utilisez avec le Système d'exploitation.Plateforme propriété dans la bibliothèque système.

Deuxièmement, il est possible que vous placiez vos paramètres de police dans les fichiers de ressources et que vous déterminiez quel fichier de ressources utiliser en fonction de certaines conditions (par exemple, la version de votre système d'exploitation).

Personnellement, je pense qu'il serait bien de laisser votre utilisateur déterminer les polices à utiliser. ils préférez la police que vous souhaitez qu'ils utilisent.

Enfin, vous voudrez peut-être jeter un œil à WPF car c’est l’un des problèmes qu’il a été conçu pour résoudre.

le problème est-il de déterminer l'emplacement des contrôles ?c'est à dire.vous savez que les polices X et Y fonctionnent sur les systèmes d'exploitation A et B et donnent la mise en page souhaitée avec le texte que vous utilisez sur ces systèmes ?

La méthode MeasureString peut vous aider à élaborer votre mise en page de manière à ne pas être lié à des polices spécifiques.

float textWidth = graphiques.MeasureString(someString, someFont).Width;

(un changement dans l'alignement du texte fonctionnerait-il ?Je n'ai peut-être pas compris le problème aussi)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top