Si tu arrêtes AutoSize
sur un contrôle, il doit y avoir un Label
, puisque TextBox
n'a pas une propriété AutoSize
. La propriété TextAlign d'un Label
est de type ContentAligment, vous pouvez donc définir l'alignement horizontal et vertical.
Pour différentes raisons ennuyeuses, les zones de texte dans les fenêtres sont conçues pour ajuster automatiquement leur hauteur à la police utilisée. Pour contrôler les hauteurs et centrer verticalement le texte, vous pouvez créer rapidement un UserControl personnalisé dans lequel vous pouvez remplacer toutes vos zones de texte.
Sur votre contrôle utilisateur, définissez BorderStyle sur Fixed3D et BackColor sur System.Window. Ajoutez un TextBox et définissez son BorderStyle à Aucun. Dans l'événement Resize pour le contrôle, ajoutez du code qui a la même largeur que la zone client du contrôle utilisateur (représentant les pixels de bordure) et l'aligne à gauche (c'est-à-dire textBox1.Left = 0;
) et le centre verticalement (par exemple textBox1.Top = (this.Height - textBox1.Height)/2;
). Enfin, ajoutez au contrôle utilisateur toutes les propriétés et les événements de type TextBox dont vous avez besoin (probablement juste Text et TextChanged, je suppose), et branchez-les pour qu'ils passent à la TextBox dans votre contrôle, comme ceci :
public string Text
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
Si vous voulez obtenir super-fantaisie avec cela, vous pouvez même remplacer la propriété TextAlign de contrôle de votre utilisateur qui est en fait de type ContentAlignment (comme l'étiquette), puis aligner la zone de texte intérieur correspondant.
Cette même approche fonctionnera pour une ComboBox, même si elle semble légèrement étrange. Avec la zone de liste déroulante, vous définissez sa propriété FlatStyle à plat - sinon vous le traitez comme un contrôle TextBox. Il semblera étrange parce que la boîte de flèche de la liste déroulante ne sera pas tout à fait en haut et en bas du panneau.
Juste comme un FYI, il y a en fait une propriété AutoSize sur TextBoxes. Il ne s'affichera simplement pas dans la feuille de propriétés ou ne se terminera pas automatiquement en raison de certaines décorations d'attribut. Mais myTextBox.AutoSize = false; compilera, et mettre cela dans le constructeur d'un contrôle hérité donnera une boîte de texte redimensionnable. – Clyde
Noté.Cela fait des années que je n'ai plus essayé de rendre les commandes de Windows différentes de la norme, alors je suis un peu rouillé. Il est intéressant que l'Intellisense dise "Cette propriété n'est pas pertinente pour cette classe", même si elle est évidemment * est * (la mettre à false rend la hauteur ajustable). – MusiGenesis
Je suppose que la réponse la plus facile est: passer à WPF. Tout a une propriété VerticalContentAlignment et une propriété HorizontalContentAlignment. – MusiGenesis