这似乎是一件容易的事,但是,我找不到任何有效的方法。当我们在整行的末尾键入时,我希望textbox
自动添加额外的行(因此,我们被重定向到新行)。
也许我更好地展示如下:
文本框当前值:asdfghj
(这是文本框的全长)
我们在j
之后输入新字符串:asd
。我明白了:
asd
只有一行,以查看我需要向上滚动的第一行^
我希望看到:
asdfghj
asd
两行。
我试过这段代码:
private void textBox1_TextChanged(object sender, EventArgs e)
{
Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font);
textBox1.Width = size.Width;
textBox1.Height = size.Height;
}
但是,当我仅按enter
或shift-enter
时,会创建额外的行。我希望它能自动添加。我还有Multiline=true
和Wordwrap=true
。
答案 0 :(得分:2)
有点像黑客,但试试这个,看看它是否符合你的需求:
int previouslines = 1;
private void textBox2_TextChanged(object sender, EventArgs e)
{
int size=textBox2.Font.Height;
int lineas = textBox2.Lines.Length;
int newlines = 0;
if (textBox2.Text.Contains(Environment.NewLine))
{
newlines = textBox2.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None).Length - 1;
lineas += newlines - (textBox2.Lines.Length - 1);
}
for(int line_num= 0;line_num<textBox2.Lines.Length;line_num++)
{
if (textBox2.Lines[line_num].Length > 1)
{
int pos1=textBox2.GetFirstCharIndexFromLine(line_num);
int pos2= pos1 + textBox2.Lines[line_num].Length-1;
int y1 = textBox2.GetPositionFromCharIndex(pos1).Y;
int y2 = textBox2.GetPositionFromCharIndex(pos2).Y;
if (y1 != y2)
{
int aux = y2+size;
lineas = (aux / size);
if (y1 != 1)
{
lineas++;
}
lineas += newlines - (textBox2.Lines.Length - 1);
}
}
}
if (lineas > previouslines)
{
previouslines++;
textBox2.Height = textBox2.Height + size;
}
else if (lineas<previouslines)
{
previouslines--;
textBox2.Height = textBox2.Height - size;
}
}
答案 1 :(得分:0)
如果设置了MultiLine
,您可以这样做:
1)通过将其分成数组来估算TextBox
中最后一行文本的长度(可能不是禁食)
2)如果该行有更多MAX_CHARS
个字符,那么
3)获取除最后一个字符之外的所有文本,然后添加新行,然后添加该字符
4)正确的选择和位置
const int MAX_CHARS = 10;
private void textBox1_TextChanged(object sender, EventArgs e)
{
string[] sTextArray = textBox1.Text.Split( new string[] {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries );
int nLines = sTextArray.Length;
string sLastLine = sTextArray[nLines -1];
if (sLastLine.Length > MAX_CHARS)
{
int nTextLen = textBox1.Text.Length;
string sText = textBox1.Text.Substring(0, nTextLen - 1) + Environment.NewLine + textBox1.Text[nTextLen - 1];
textBox1.Text = sText;
textBox1.SelectedText = "";
textBox1.Select(nTextLen +2, 0);
}
}