9
votes

C # Winforms Alignement vertical pour la zone de texte, etc.

Je travaille sur un projet mettant à jour leur application WinForms UI pour être plus cohérent avec les tailles. Les commandes de Textbox et de Combobox ont des hauteurs différentes par défaut, même avec la même police. J'ai été capable de redimensionner les zones de texte en éteignant l'automobile, mais le texte étreint toujours le haut du contrôle, laissant un écart ci-dessous.

Y a-t-il un moyen de centrer le texte verticalement dans le contrôle?


0 commentaires

5 Réponses :


7
votes

Si vous désactivez autosize sur un contrôle, il doit s'agir d'une étiquette , puisque textbox n'a pas de Autosize Propriété. La propriété textalign d'une étiquette est de type contentientaligment , de sorte que vous pouvez définir un alignement horizontal et vertical.

Pour diverses raisons ennuyeuses, textboxes dans Windows sont destinés à ajuster automatiquement leurs hauteurs à la police utilisée. Pour contrôler la hauteur et le centre vertical du texte, vous pouvez créer rapidement un USERCONTROL , que vous pouvez utiliser pour remplacer tous vos textboxes avec.

Sur votre usingontrol , définissez le Borderstyle sur fixe3d et le backcolor sur sur system.window . Ajouter un Textbox et définissez son Borderstyle sur Aucun . Dans l'événement de redimensionnement du contrôle, ajoutez du code qui rend le Textbox de la même largeur que la zone client de la commande de l'utilisateur (comptant les pixels de bordure) et l'aligne à gauche (c'est-à-dire textbox1.left = 0; ) et la verticalement le centre (par exemple, textbox1.top = (this.height - textbox1.height) / 2; ).

enfin, ajoutez à Le contrôle de l'utilisateur Tout textbox -Type et événements dont vous avez besoin (probablement texte et textchanged , je vais deviner) et les câbler pour qu'ils passent à la < code> textbox à l'intérieur de votre contrôle, comme celui-ci: xxx

Si vous vouliez obtenir une super-fantaisie avec ceci, vous pouvez même remplacer Textalign propriété avec une qui est en fait de type contentialIgnment (comme l'étiquette), puis alignez la zone de texte interne pour correspondre.

Ceci Même approche fonctionne pour un Combobox , bien qu'il ait l'air légèrement étrange. Avec le Combobox , vous définissez sa propriété Flattsyle à plat - sinon vous en avez traite la même chose que celle d'une zone de texte . Il semblera étrange car la boîte de flèche déroulante ne sera pas tout à fait en haut et en bas du panneau.


6 commentaires

Tout comme un fyi, il y a en fait une propriété autosize sur des boîtes de texte. Il ne se présentera tout simplement pas dans la feuille de propriétés ni automatiquement en raison de décorations d'attributs. Mais mytextbox.Autosize = false; Compilera et la mise dans le constructeur d'un contrôle héritée entraînera une zone de texte redimensionnable.


Noté. Cela fait des années que je suis arrêté d'essayer de faire ressembler des contrôles Windows différents que la norme, alors je suis un peu rouillé. Il est intéressant de noter que l'IntelliSense dit "Cette propriété n'est pas pertinente pour cette classe", même si cela est évidemment est (le régler sur False fait effectivement la hauteur réglable).


Je suppose que la réponse plus facile est la suivante: Basculer vers WPF. Tout a une itinérance verticale et une propriété horizontaleContentalIntientalIntiLIntiLImPling.


Je pense que c'est précisément pourquoi ils ont caché la hauteur de la propriété - l'ajustement est inutile si vous ne pouvez pas ajuster l'alignement. J'essaie de voir votre solution maintenant pour voir si cela fonctionnera pour nous.


Je suis à peu près sûr qu'il y a une API Win32-API, de manière verticale d'aligner verticalement une zone de texte, mais je ne peux pas le trouver. Je pense que la voie de contrôle de l'utilisateur serait moins de travail, finalement, et vous auriez plus de contrôle sur la sortie finale.


Textbox.Autoszie existe mais Visual Studio Intellissez Masquer ceci.



2
votes

Créer un contrôle vide et inclure votre texte en tant qu'enfant. Ensuite, lorsque le parent contrôle ou la zone de texte , redimensionner réalignez votre Textbox Contrôle du milieu verticalement.

Retirez les bordures, rendez l'arrière-plan de la même couleur que le parent (par défaut). Remplacez la police pour définir la police de la police et je pense que vous avez un alignement verticalement aligné de texte . .


0 commentaires

0
votes

Une solution très simple consiste à utiliser un datagridview avec 1 colonne, 1 rangée, des en-têtes de colonne et de ligne non visibles et do defaultcellstyle.alignment = middleleft .

et désactiver l'ajout / la suppression des lignes et vous avez une zone de texte qui aligne parfaitement le texte.


0 commentaires

-1
votes

Vous pouvez simplement ajuster le rembourrage - vertical plus élevé. Propriété dans la mise en page de la catégorie.


1 commentaires

Non, tu ne peux pas. Le contrôle de la zone de texte n'a pas de propriété de rembourrage.



0
votes

Avez-vous essayé la solution TableLayOntPanel pour fournir un alignement vertical? Vous pouvez ensuite ajuster la hauteur comme vous le souhaitez, à travers des événements de manière dynamique, ou en utilisant une valeur fixe, ou avec le TableLayOntPanel S 'Strong> Autosize de rangée Fonction.

Il suffit d'ajouter un TableLayOntPanel pour contenir la zone de texte . Ce TableLayoutContainer a 1 colonne et 3 rangées. La zone de texte doit être placée dans la deuxième ligne. La première et les dernières lignes sont réglées à une hauteur de 50% (elles n'utilisent réellement que la "hauteur restante"). Une fois que vous avez placé le textbox dans la deuxième ligne, cette ligne peut ensuite être réglée sur une valeur absolue de votre choix ou de la taille automatique.

Le TableLayOntPanel a son propre contrôle de largeur et de hauteur. Mais si vous placez ce TableLayOntPanel à l'intérieur d'une cellule d'un autre TableLayOntPanel , rappelez-vous simplement de définir la taille automatique de votre nouveau TableLayOntPanel sur TRUE , donc il peut s'adapter à la taille de la cellule.

En général, TableLayOntPanels est d'une grande aide pour votre conception, je vous recommande de les utiliser.

 Entrez la description de l'image ici


0 commentaires