web-dev-qa-db-fra.com

Changer la hauteur de la zone de texte?

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.

40
Guapo

Il y a deux façons de faire ça :

  • Définissez la propriété "multiligne" de la zone de texte sur true, dans ce cas, vous ne souhaitez pas le faire;
  • Définir une taille de police plus grande dans la zone de texte

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

49
MrRoy

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.

53
Tomasz Szymański

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.

24

définir la propriété de taille minimale

tb_01.MinimumSize = new Size(500, 300);

Cela fonctionne pour moi.

8
Salty

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! 

4
Johnathan Brown
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;
    }
3
YDS

Essayez ce qui suit :)

        textBox1.Multiline = true;
        textBox1.Height = 100;
        textBox1.Width = 173;
2
Rauf

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.

1
amiralles

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 

1
ArunPratap

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;
            }
        }
1
pili

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;
0
IQtheMC

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.

0
JoeMilo

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.

0
Harvey Triana

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;
        }
    }
}
0
Tom Bogle

Pas:

  1. Définir les zones de texte sur multiligne
  2. Changer la hauteur
  3. Changer la taille de la police. (donc ça rentre dans les grandes boîtes de texte)
  4. Redéfinissez les zones de texte sur non multiligne
0
666NotFound

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;
    }
0
Ahmad