Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框控件的最大长度,以避免字符串修剪?_C#_Winforms_Textbox - Fatal编程技术网

C# 文本框控件的最大长度,以避免字符串修剪?

C# 文本框控件的最大长度,以避免字符串修剪?,c#,winforms,textbox,C#,Winforms,Textbox,使用TextBox控件,我希望强制执行最大长度。但是,最大长度基于字符串大小(以像素为单位),而不是字符数 我想限制键入更多字符,如果这样做会导致文本渲染器修剪字符,通常会用省略号(…)截断字符 问题是我不一定使用固定字体。我使用的是一个多行文本框。我想你需要按照下面的公式设置宽度 [border slack] + ([character length] * ([number of characters] + [5 - number of characters Mod 5])). 我想你需要

使用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])). 

如果字体不是固定大小,则在键入每个字符后,必须重新计算宽度/高度

大概是这样的:

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)。用那个。