C# 文本框控件的最大长度,以避免字符串修剪?
使用TextBox控件,我希望强制执行最大长度。但是,最大长度基于字符串大小(以像素为单位),而不是字符数 我想限制键入更多字符,如果这样做会导致文本渲染器修剪字符,通常会用省略号(…)截断字符C# 文本框控件的最大长度,以避免字符串修剪?,c#,winforms,textbox,C#,Winforms,Textbox,使用TextBox控件,我希望强制执行最大长度。但是,最大长度基于字符串大小(以像素为单位),而不是字符数 我想限制键入更多字符,如果这样做会导致文本渲染器修剪字符,通常会用省略号(…)截断字符 问题是我不一定使用固定字体。我使用的是一个多行文本框。我想你需要按照下面的公式设置宽度 [border slack] + ([character length] * ([number of characters] + [5 - number of characters Mod 5])). 我想你需要
问题是我不一定使用固定字体。我使用的是一个多行文本框。我想你需要按照下面的公式设置宽度
[border slack] + ([character length] * ([number of characters] + [5 - number of characters Mod 5])).
我想你需要按照下面的公式设置宽度
[border slack] + ([character length] * ([number of characters] + [5 - number of characters Mod 5])).
如果字体不是固定大小,则在键入每个字符后,必须重新计算宽度/高度 大概是这样的:
public void ValueChanged()
{
var stringSize = e.Graphics.MeasureString(textBox.Text, textBox.Font);
if(stringSize.Height > MAXSTRINGHEIGHT)
{
textBox.Text = TrimTextAndAddEllipsis(textBox.Text);
}
}
如果字体不是固定大小,则在键入每个字符后,必须重新计算宽度/高度 大概是这样的:
public void ValueChanged()
{
var stringSize = e.Graphics.MeasureString(textBox.Text, textBox.Font);
if(stringSize.Height > MAXSTRINGHEIGHT)
{
textBox.Text = TrimTextAndAddEllipsis(textBox.Text);
}
}
看看也许能帮你:看看也许能帮你:问题是,每个字符都有不同的宽度。在很多字体中,“W”比“i”宽。@Carra,我是针对等式中的
字符长度
,而不是每个字符的宽度。问题是,每个字符可以有不同的宽度。“W”在很多字体中都比“i”宽。@卡拉,我在等式中发布了字符长度
,而不是每个字符的宽度。winforms文本框使用GDI文本呈现器,而不是GDI+,因此我需要使用TextRenderer.MeasureText而不是Graphics.MeasureString。此外,我还想模拟textbox“MaxLength”属性行为。一旦到达此点,文本框不应再接受任何字符,并发出错误提示音,这与MaxLength的正常情况相同。我不想修剪过长的字符串,我想避免用户根据文本的呈现大小输入过长的字符串。然后,您必须将此答案与chridams注释相结合。只需将最大字符检查替换为宽度/高度检查的计算。即使您将代码更改为TextRenderer函数,在多行文本框中换行时,代码也会返回单行的高度,而不是多行的高度。有一个度量值(text、font、maxWidth)。winforms文本框使用GDI文本呈现程序,而不是GDI+,因此我需要使用TextRenderer.MeasureText而不是Graphics.MeasureString。此外,我还想模拟textbox“MaxLength”属性行为。一旦到达此点,文本框不应再接受任何字符,并发出错误提示音,这与MaxLength的正常情况相同。我不想修剪过长的字符串,我想避免用户根据文本的呈现大小输入过长的字符串。然后,您必须将此答案与chridams注释相结合。只需将最大字符检查替换为宽度/高度检查的计算。即使您将代码更改为TextRenderer函数,在多行文本框中换行时,代码也会返回单行的高度,而不是多行的高度。有一个度量值(text、font、maxWidth)。用那个。