Comment changer la hauteur d'un champ de texte?
Aucun des travaux ci-dessous ne fonctionne:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
ou
this.TextBox1.Size.Height = 100;
Je voulais pouvoir modifier la hauteur de la zone de texte sur une seule ligne pour l'adapter à une taille de police sans utiliser plusieurs lignes si possible.
Il y a deux façons de faire ça :
Je crois que ce sont les seuls moyens de le faire. la taille de police la plus grande devrait automatiquement s’adapter à la zone de texte
Allez dans yourForm.Designer.cs Faites défiler jusqu'à votre zone de texte. L'exemple ci-dessous concerne l'objet textBox2 . Ajoutez ceci
this.textBox2.AutoSize = false;
et définir sa taille à tout ce que vous voulez
this.textBox2.Size = new System.Drawing.Size(142, 27);
Travaillera comme un charme - sans définir multiligne sur true, mais seulement jusqu'à ce que vous changiez une option dans le concepteur lui-même (vous devrez redéfinir ces 2 lignes) ..__ Je pense que cette méthode est toujours meilleure que la multiligne. J'avais une zone de texte pour pseudo dans mon application et avec plusieurs lignes, des personnes écrivaient parfois accidentellement leur nom deux fois, comme Thomas\nThomas (vous n'en avez vu qu'un dans la ligne de texte). Avec cette solution, le texte est tout simplement masqué à gauche après chaque caractère trop long pour la largeur; il est donc beaucoup plus sûr pour les utilisateurs de placer des entrées.
Vous pouvez définir les propriétés MinimumSize
et/ou MaximumSize
de la zone de texte. Cela n'affecte pas la taille immédiatement, mais lorsque vous redimensionnez la zone de texte dans le concepteur de formulaires, la taille est automatiquement ajustée pour satisfaire les contraintes de taille minimale/maximale. Cela fonctionne même lorsque Multiline
est défini sur false
et ne dépend pas de la taille de la police.
définir la propriété de taille minimale
tb_01.MinimumSize = new Size(500, 300);
Cela fonctionne pour moi.
Je viens de trouver un bon petit truc pour définir une hauteur personnalisée dans une zone de texte.
Dans la vue Concepteur, définissez minimumSize
sur tout ce que vous désirez, puis supprimez complètement le paramètre size
. Cela obligera le concepteur à mettre à jour les nouveaux paramètres minimum!
public partial class MyTextBox : TextBox
{
[DefaultValue(false)]
[Browsable(true)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
public MyTextBox()
{
InitializeComponent();
this.AutoSize = false;
}
Essayez ce qui suit :)
textBox1.Multiline = true;
textBox1.Height = 100;
textBox1.Width = 173;
Peut-être qu'il est un peu tard. Mais tu peux faire ça.
txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);
Je l'ai résolu de cette façon.
la manière la plus simple de le faire
1 .. clic droit sur la zone de texte
2 .. aller à la propriété
set Multiline = True
maintenant fait, il va changer automatiquement la taille de TextBox
et vous pouvez également personnaliser cela
Taille automatique, Minimum, Maximum ne donne pas de flexibilité. Utilisez plusieurs lignes et gérez l'événement enter key et supprimez la frappe. Fonctionne très bien.
textBox1.Multiline = true;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
}
}
C'est ce qui a bien fonctionné pour moi puisque tout ce que je voulais faire était de régler la hauteur de la zone de texte. La propriété est en lecture seule et appartient à la classe Unit. Vous ne pouvez donc pas la définir. Je viens donc de créer une nouvelle unité et le constructeur me permet de définir la hauteur, puis de définir la zone de texte sur cette unité.
Unit height = txtTextBox.Height;
double oldHeight = height.Value;
double newHeight = height.Value + 20; //Added 20 pixels
Unit newHeightUnit = new Unit(newHeight);
txtTextBox.Height = newHeightUnit;
Certains d'entre vous étaient proches, mais changer le code d'un concepteur comme ça est ennuyeux car il faut toujours revenir en arrière et le changer à nouveau.
L'OP d'origine utilisait probablement une version plus ancienne de .net, car la version 4 redimensionnait automatiquement la hauteur de la zone de texte en fonction de la police mais ne dimensionnait pas les mêmes listes déroulantes et zones de texte, ce qui est un problème complètement différent, mais m'a amené ici.
C'est le problème que j'ai rencontré lors du placement des zones de texte à côté de comboboxes sur un formulaire. C'est un peu irritant car qui veut deux contrôles côte à côte avec des hauteurs différentes? Ou différentes polices pour forcer les hauteurs? Intensifiez Microsoft, cela devrait être simple!
J'utilise .net framework 4 dans VS2012 et voici la solution la plus simple.
Dans l'événement de chargement de formulaire (ou n'importe où aussi longtemps que déclenché après InitializeComponent
): textbox.AutoSize = false
Définissez ensuite la hauteur à votre guise. Pour moi, je voulais que mes zones de texte et zones de liste déroulante aient la même hauteur, donc textbox.height = combobox.height
me convenait parfaitement.
Remarques:
1) Le concepteur ne sera pas affecté, vous devrez donc commencer votre projet pour voir le résultat final. Il peut donc y avoir des essais et des erreurs.
2) Alignez les sommets de vos comboboxes et de vos zones de texte si vous souhaitez qu’ils soient correctement alignés après le redimensionnement, car les zones de texte s’agrandiront.
pour moi, la meilleure approche consiste à supprimer la bordure de la zone de texte et à la placer dans un panneau pouvant être personnalisé à votre guise.
Le code suivant ajouté dans votre constructeur après avoir appelé InitializeComponent () permettra de définir par programme votre zone de texte à la hauteur correcte sans a) modifier la propriété Multiline, b) devoir coder en dur une hauteur code généré. Ce n'est toujours pas aussi propre ou agréable que de le faire dans un contrôle personnalisé, mais c'est assez simple et robuste:
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
J'ai décidé de le rendre plus propre et plus facile à utiliser en le plaçant dans une classe statique et en en faisant une méthode d'extension sur TextBox:
public static class TextBoxExtensions
{
public static void CorrectHeight(this TextBox txtbox)
{
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
}
}
Pas:
Vous pouvez le placer à l'intérieur d'un panneau ayant la même couleur de fond avec la hauteur souhaitée. De cette façon, l'avantage est que la zone de texte peut se centrer horizontalement, ce qui n'est pas fourni par d'autres solutions.
Vous pouvez le rendre encore plus naturel en utilisant les méthodes suivantes
private void textBox1_Enter(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.FixedSingle;
}
private void textBox1_Leave(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.None;
}