it-swarm.com.de

Ändern Sie die Höhe der Textbox?

Wie ändere ich die Höhe eines Textfelds?

Keine der folgenden Arbeiten:

this.TextBox1.Size = new System.Drawing.Size(173, 100);

oder

this.TextBox1.Size.Height = 100;

Ich wollte in der Lage sein, die Höhe des einzeiligen Textfelds an die Schriftgröße anzupassen, ohne mehrzeilige Zeilen zu verwenden.

40
Guapo

Es gibt zwei Möglichkeiten, dies zu tun:

  • Setzen Sie die "Multiline" -Eigenschaft des Textfelds auf "true". In diesem Fall möchten Sie dies nicht tun.
  • Legen Sie eine größere Schriftgröße für das Textfeld fest

Ich glaube, es ist die einzige Möglichkeit, dies zu tun. Die größere Schriftgröße sollte automatisch in das Textfeld passen

49
MrRoy

Gehen Sie in IhreForm.Designer.cs Scrollen Sie zu Ihrem Textfeld. Das folgende Beispiel ist für das TextBox2-Objekt . Fügen Sie dies hinzu

this.textBox2.AutoSize = false;

und stellen Sie die Größe auf das, was Sie möchten

this.textBox2.Size = new System.Drawing.Size(142, 27);

Funktioniert wie ein Zauber - ohne Multiline auf true zu setzen, aber nur, wenn Sie eine Option in Designer selbst ändern (Sie müssen diese 2 Zeilen erneut festlegen) ... Ich denke, diese Methode ist immer noch besser als Multilining. Ich hatte ein Textfeld für den Spitznamen in meiner App und mit Multiline schrieb ich manchmal aus Versehen zweimal ihren Namen, wie Thomas\nThomas (Sie haben nur einen in der eigentlichen Textfeldzeile gesehen). Bei dieser Lösung wird Text nach jedem Zeichen, das für die Breite zu lang ist, einfach nach links ausgeblendet, sodass der Benutzer wesentlich sicherer ist, Eingaben vorzunehmen.

53

Sie können die Eigenschaften MinimumSize und/oder MaximumSize des Textfelds festlegen. Dies wirkt sich nicht sofort auf die Größe aus. Wenn Sie jedoch die Größe des Textfelds im Formular-Designer ändern, wird die Größe automatisch an die Mindest-/Maximalgrößenbeschränkungen angepasst. Dies funktioniert auch, wenn Multiline auf false gesetzt ist und nicht von der Schriftgröße abhängt.

legen Sie die Mindestgröße fest

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

Das funktioniert für mich.

8
Salty

Ich habe gerade einen kleinen Trick gefunden, um eine benutzerdefinierte Höhe für ein Textfeld festzulegen.

Legen Sie in der Designersicht minimumSize auf das gewünschte Zeichen fest und entfernen Sie die Einstellung size vollständig. Dadurch wird der Designer mit den neuen Mindesteinstellungen aktualisiert! 

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

Versuche Folgendes :)

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

Vielleicht ist es etwas spät. Aber das kannst du tun.

txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);

Ich habe es so gelöst.

1
amiralles

der einfachste Weg, das zu tun

1. Klicken Sie mit der rechten Maustaste auf das Textfeld 

2 .. zu Eigentum gehen 

set Multiline = True

jetzt wird die Größe von TextBox automatisch geändert 

und Sie können das auch anpassen 

1
ArunPratap

AutoSize, Minimum, Maximum gibt keine Flexibilität. Verwenden Sie Multiline und behandeln Sie das Enter-Tastenereignis und unterdrücken Sie den Tastendruck. Funktioniert super.

textBox1.Multiline = true;

 private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
            }
        }
1
pili

Das hat mir gut geholfen, da ich nur die Höhe des Textfelds einstellen wollte. Die Eigenschaft ist schreibgeschützt. Die Eigenschaft befindet sich in der Klasse Unit. Sie können sie also nicht einfach festlegen. Also habe ich gerade eine neue Einheit erstellt, und der Konstruktor lässt mich die Höhe festlegen und dann das Textfeld auf diese Einheit setzen.

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

Einige von euch waren nah dran, aber so einen Designer-Code zu ändern, ist ärgerlich, weil man immer wieder zurückgehen und ihn noch einmal ändern muss. 

Das ursprüngliche OP verwendete wahrscheinlich eine ältere Version von .net, da Version 4 die Höhe des Textfelds automatisch an die Schriftart anpasst, jedoch die Größe der Comboboxen und Textfelder nicht gleich ist. 

Dies ist das Problem, dem ich begegnet bin, wenn Textfelder neben Comboboxen in einem Formular platziert werden. Dies ist ein wenig irritierend, denn wer möchte zwei Steuerelemente mit unterschiedlichen Höhen nebeneinander haben? Oder andere Schriftarten, um Höhen zu erzwingen? Steigern Sie Microsoft, das sollte einfach sein!

Ich verwende das .net Framework 4 in VS2012 und das Folgende war für mich die einfachste Lösung. 

Im Formularladeereignis (oder an einer beliebigen Stelle nach InitializeComponent): textbox.AutoSize = false Stellen Sie dann die Höhe auf den gewünschten Wert ein. Für mich wollte ich, dass meine Textfelder und Kombinationsfelder die gleiche Höhe haben, sodass textbox.height = combobox.height für mich der Trick war.

Anmerkungen:

1) Der Designer ist nicht betroffen. Daher müssen Sie Ihr Projekt starten, um das Endergebnis zu sehen. Daher kann es zu Versuch und Irrtum kommen.

2) Richten Sie die oberen Enden Ihrer Comboboxes und Textfelder aus, wenn Sie möchten, dass sie nach der Größenänderung richtig ausgerichtet werden, da die Textfelder nach unten rollen.

0
JoeMilo

am besten entfernen Sie den Rand des Textfelds und platzieren ihn in einem Panel, das Sie nach Belieben anpassen können.

0
Harvey Triana

Mit dem folgenden Code, der nach dem Aufruf von InitializeComponent () in Ihrem Konstruktor hinzugefügt wurde, können Sie das Textfeld programmgesteuert auf die richtige Höhe einstellen, ohne dass a) die Multiline-Eigenschaft geändert wird, b) eine Höhe hartcodiert wird oder generierter Code. Es ist immer noch nicht unbedingt so sauber oder schön wie bei einem benutzerdefinierten Steuerelement, aber es ist recht einfach und robust:

if (txtbox.BorderStyle == BorderStyle.None)
{
    txtbox.BorderStyle = BorderStyle.FixedSingle;
    var heightWithBorder = txtbox.ClientRectangle.Height;
    txtbox.BorderStyle = BorderStyle.None;
    txtbox.AutoSize = false;
    txtbox.Height = heightWithBorder;
}

Ich entschied mich dafür, es sauberer und benutzerfreundlicher zu machen, indem ich es in eine statische Klasse einfügte und es eine Erweiterungsmethode in TextBox machte:

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

Schritte:

  1. Setzen Sie die Textfelder auf mehrzeilig
  2. Ändern Sie die Höhe
  3. Ändern Sie die Schriftgröße. (damit es in die großen Textfelder passt)
  4. Setzen Sie die Textfelder wieder auf nicht mehrzeilig
0
666NotFound

Sie können es in ein Panel einfügen, das die gleiche Hintergrundfarbe mit der gewünschten Höhe hat. Dieser Weg hat den Vorteil, dass das Textfeld horizontal zentriert werden kann, was andere Lösungen nicht bieten.

Sie können es mit den folgenden Methoden noch natürlicher gestalten

    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