C # Größe der Textbox an den Inhalt anpassen
Schreibe ich ein Programm, wo der Benutzer sollte in der Lage sein, um text in ein Textfeld. Ich möchte das Textfeld, um die Größe an sich, es passt also der Inhalt.
Ich habe versucht, die folgenden:
private void textBoxTitle_TextChanged(object sender, TextChangedEventArgs e)
{
System.Drawing.Font myFont = new System.Drawing.Font("Verdana", 8);
System.Drawing.SizeF mySize = e.Graphics.MeasureString("This is a test", myFont);
this.textBoxTitle.Width = (int)Math.Round(mySize.Width, 0);
}
Bekomme ich eine Fehlermeldung, die sagen, dass Grafik nicht funktioniert, TextChangedEventArgs. Gibt es einen anderen Weg kann ich die Größe der textbox?
InformationsquelleAutor der Frage user744289 | 2011-11-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie versuchen, ein etwas code wie unten. Es hat für mich gearbeitet.
Weitere Informationen finden Sie TextRenderer.MeasureText()
InformationsquelleAutor der Antwort Sai Kalyan Kumar Akshinthala
Ich bin das hinzufügen dieser Antwort, da ich nicht sehen, die
fixed width
Aspekt einer textbox diskutiert, die in keine der anderen. Wenn Sie eine Feste Breite für das Textfeld, und die Sie anpassen möchten, nur seine Höhe ist etwas wie die folgende:Etwas wie diese gibt die Höhe des Textes, wie es gezeichnet ist, in das mehrzeilige wordwrapped textbox selbst:
Ich bin nicht sicher, was
StringFormat
sein sollte, aber die WerteStringFormatFlags
scheint das nicht zu gelten für eine Standard -TextBox
stellen.Nun mit
MessageSize.Height
kennen Sie die Höhe des Texts in der textbox.InformationsquelleAutor der Antwort Mike de Klerk
Ihre Bindung auf der falschen Veranstaltung, und Sie können das graphics-Objekt in der
TextChangedEventArgs
Objekt.Versuchen über das TextChanged-Ereignis. Der folgende Codeausschnitt funktioniert:
}
InformationsquelleAutor der Antwort Daniel Peñalba
Ich hatte das gleiche problem und habe es gelöst in einem einfacheren Weg.
Benutzte ich die AutoSize-Eigenschaft eines Label-Steuerelements.. ich Hinzugefügt ein unsichtbares Etikett auf dem Formular, stellen Sie die AutoSize-Eigenschaft True. Wenn die ich ändern muss die Größe meiner Textfeld-verwende ich diesen code:
Ich die Maximale und Minimale Größe der Beschriftung für bessere Ergebnisse.
Spaß Haben
InformationsquelleAutor der Antwort Nour Assi
Müssen Sie die CreateGraphics () - Methode des Formulars zum erstellen der Graphics-Instanz, Messen Sie die Zeichenfolge auf.
Den
TextChangedEventArgs
Klasse keineGraphics
Eigenschaft, dass ist eine Eigenschaft derPaintEventArgs
Klasse übergeben derPaint
event-handlerInformationsquelleAutor der Antwort samjudson
Versuchen Sie dies:
Im wesentlichen erstellen Sie Ihre eigenen
Graphics
- Objekt für das Formular, dann Messen Sie es anhand des Textes und die schriftart der TextBox. Dieusing
wird die ordnungsgemäße Entsorgung derGraphics
Objekt - Ihre Vorherige code würde zugespielt haben schrecklich!InformationsquelleAutor der Antwort Polynomial
Haben Sie versuchen
yourTextBox.AutoSize = true;
?Diese Eigenschaft kann ausgeblendet werden im GUI-designer, aber Sie können es im Formular-Konstruktor direkt nach
InitializeComponent();
nennen.InformationsquelleAutor der Antwort Vladimir Perevalov
Grafiken.Messen Zeichenfolge, die Sie tun können, o PaintEventArgsnicht auf TextChangedEventArgs
Was ich denke, Sie wollen, ist dies
Das problem ist, dass Sie können nicht erstellen Sie eine Grafiken Objekt einfach durch Zuweisung von it-da hat es keinen public-Konstruktor, so sollte man besser hingehen und TextRenderer.MeasureText, wie in http://msdn.microsoft.com/en-us/library/y4xdbe66.aspx
TextRenderer ist weniger präzise, da es verwendet GDI und Grafiken GDI+ verwendet, so sollten Sie vielleicht lassen Sie ein wenig Spielraum auf den Wert ein, den Sie aus der Width-Eigenschaft.
Hoffe, das hilft
InformationsquelleAutor der Antwort aelena
Was immer das Ziel ist.
Wenn die Größe der textbox sollte dynamisch eingerichtet, basierend auf der Zeichenfolge, die den text in dieser box es ist keine schöne option.
Gründe : MeasureString verwendet üblichen string-Formatierer als Trennzeichen für seine eigene Breite und Höhe.
Bedeutet, carriage return und line feed geparst, auch. Was in einem sizeF.Breite und sizeF.Höhe.
Abhängig von der Zeichenfolge( und die schriftart und die Anzahl der Zeilen ) diese beiden Variablen können Werte tragen, die sind manchmal nutzlos zu sein als Breite/Höhe-Werte von einem Textfeld ( weil Sie größer werden kann als der parentform Werte und dieses würde die Größe der textbox zu einer Größe, mit linken und unteren Rand, die über die von der übergeordneten form).
Einige Lösungen sind immer noch verfügbar, abhängig von den Zielen, die man erreichen möchte.
Eine Idee wäre :
Erstellen Sie ein Textfeld, in designer, Größe = 100 X 100. aktivieren Zeilenumbruch.
In der OnTextChanged event-handler der textbox, wir nur die Größe der textbox für die Breite auf einen Wert, definiert durch uns selbst (z.B. parentform.Breite oder einem anderen hart-Wert ).
Dies würde bewirken, dass der Zeilenumbruch, um eine Neuberechnung der string in der textbox und das würde neu anordnen, die alle die Zeichen innerhalb der textbox, weil der Zeilenumbruch aktiviert ist.
Sich die Höhe des Textfeldes können, könnte festgelegt werden, schwer zu parentform.Höhe, zum Beispiel.
ABER,
besser : legen Sie die Höhe dynamisch,basierend auf den Y-Wert der ReturnValue (Punkt) die Methode texbox.GetPositionFromCharIndex(textbox.TextLength -1 ).
Dann, mit Math.Min() bestimmen, die kleiner ist ( entweder parentform.Höhe oder Zeitpunkt.Y ) , und setzen Sie die textbox-Größe neue Größe(previousDeterminedWidth, nowDeterminedHeight).
Bitte beachten Sie ( wenn scrollbars aktiviert sind ) um etwa 17 pixs, um Ihr die Berechnung der Breite.
Beste Grüße
InformationsquelleAutor der Antwort icbytes