Benutzer mit den meisten Antworten
TextBox automatisch vergrößern

Frage
-
Hallo,
ich suche die Möglichkeit eine TextBox oder RichTextBox automatisch beim schreiben anzupassen.
Das heißt Sie soll eine Mindestgröße haben, wenn ich über diese Mindestgröße komme soll sie länger werden. Wenn ich Enter drücke solls sie nach unten größer werden, so dass die beiden Zeilen dann sichtbar sind, dann nochmal Enter dann wären es 3 sichtbare Zeilen usw...
private void txtbox_Click(object sender, EventArgs e) { System.Windows.Forms.TextBox pb = new TextBox(); pb.Top = 60; pb.Left = 150; pb.BackColor = Color.Yellow; pb.KeyDown += DynObject_Tasten; pb.MouseMove += this.TextBox1_MouseMove; this.Controls.Add(pb); pb.BringToFront(); }
Mein momentaner Code um die TextBox zu generieren und auf Tastendruck einzufügen.
Danke im Vorraus!
Antworten
-
Das machst du am Besten wenn du eine abgeleitete Klasse definierst undderen Methoden überschreibst. Mein Beispiel ist sicher noch zuverfeinern aber zur Anschauung tut es. Ich fange das TextChanged Eventab. In der Hauptform:[code]private void button1_Click(object sender, EventArgs e){System.Windows.Forms.TextBox dynBox = new DynamicBox(30, 20);dynBox.Top = button1.Top;dynBox.Left = 10;this.Controls.Add(dynBox);dynBox.BringToFront();dynBox.Focus();}[/code]Dann fügst du dem Projekt eine neue Datei hinzu (bei mir DynamicBox.cs),wo folgendes drinsteht:[code]using System;using System.Windows.Forms;using System.Drawing;namespace WindowsFormsApplication1{class DynamicBox : TextBox{int minWidth, minHeight;public DynamicBox(int width, int height){this.Width = minWidth = width;this.Height = minHeight = height;this.TextChanged += newSystem.EventHandler(this.OnTextChanged);this.Multiline = true;this.WordWrap = false;}private void OnTextChanged(object sender, EventArgs e){int nLines;int maxLen = 0;int hotIndex = 0;if ((nLines = this.Lines.Length) == 0)return;for (int i = 0; i < nLines; i++){if (this.Lines[i].Length > maxLen){hotIndex = i;maxLen = this.Lines[i].Length;}}Graphics gr = this.CreateGraphics();Size sz = gr.MeasureString(this.Lines[hotIndex],this.Font).ToSize();this.Width = (sz.Width > minWidth ? sz.Width : minWidth) + 2;int totalHeight = sz.Height * (nLines + 1);this.Height = (totalHeight > minHeight ? totalHeight :minHeight);}}}[/code]Hajü
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 27. April 2012 07:26
Alle Antworten
-
Das machst du am Besten wenn du eine abgeleitete Klasse definierst undderen Methoden überschreibst. Mein Beispiel ist sicher noch zuverfeinern aber zur Anschauung tut es. Ich fange das TextChanged Eventab. In der Hauptform:[code]private void button1_Click(object sender, EventArgs e){System.Windows.Forms.TextBox dynBox = new DynamicBox(30, 20);dynBox.Top = button1.Top;dynBox.Left = 10;this.Controls.Add(dynBox);dynBox.BringToFront();dynBox.Focus();}[/code]Dann fügst du dem Projekt eine neue Datei hinzu (bei mir DynamicBox.cs),wo folgendes drinsteht:[code]using System;using System.Windows.Forms;using System.Drawing;namespace WindowsFormsApplication1{class DynamicBox : TextBox{int minWidth, minHeight;public DynamicBox(int width, int height){this.Width = minWidth = width;this.Height = minHeight = height;this.TextChanged += newSystem.EventHandler(this.OnTextChanged);this.Multiline = true;this.WordWrap = false;}private void OnTextChanged(object sender, EventArgs e){int nLines;int maxLen = 0;int hotIndex = 0;if ((nLines = this.Lines.Length) == 0)return;for (int i = 0; i < nLines; i++){if (this.Lines[i].Length > maxLen){hotIndex = i;maxLen = this.Lines[i].Length;}}Graphics gr = this.CreateGraphics();Size sz = gr.MeasureString(this.Lines[hotIndex],this.Font).ToSize();this.Width = (sz.Width > minWidth ? sz.Width : minWidth) + 2;int totalHeight = sz.Height * (nLines + 1);this.Height = (totalHeight > minHeight ? totalHeight :minHeight);}}}[/code]Hajü
- Als Antwort markiert Robert BreitenhoferModerator Freitag, 27. April 2012 07:26
-
Hallo germanman,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.