调整基于MaxLength的WinForms文本框控件的大小

时间:2009-07-30 15:52:04

标签: .net winforms textbox resize

我有一种情况(基于密钥的搜索),我将有多个输入变化但受限制的长度。因此,我正在构建一个用于每个输入的公共控件,并且此控件具有一个TextBox,供输入类型为自由格式文本时使用。在这种情况下,我希望TextBox的长度反映基于TextBox的MaxLength属性(或至少在某种最大长度上)放置在输入上的约束。

我该怎么做?我意识到这对于可变宽度字符在技术上是不可能的,但我有兴趣接近。字段的最大长度从3个字符到大约90个不等。

5 个答案:

答案 0 :(得分:4)

我会尽量避免这种动态的方法 你真的认为它为用户增加了价值吗?在我看来,当一个普通控件一直有不同的外观时,它看起来很奇怪。你认为用户可以在允许32个字符的文本框和允许29个字符的文本框之间有所区别吗?极值怎么样?例如,只允许三个字符 - 甚至1024 我总是让TextBox的长度相同 - 这对你的控件来说更好,更容易实现。当用户需要提示文本的最大长度时,添加一个标签,上面写着“剩下29个字符”并在输入过程中更新......

答案 1 :(得分:1)

你可以做到这一点,但不是100%准确的一种方法是使用Graphics对象中的“MeasureString”方法,以查看X字符的宽度,以及当前使用的字体。文本框。

然后你就可以计算所需的“额外”以覆盖边界等。这不是一门精确的科学,但它会起作用。

其他想法

测量整个字符串的效率可能有点低,你可以测量1个X字符(通常比其他字符大)然后将它乘以所有

答案 2 :(得分:1)

对文本框大小进行“分块”会更简单,并且可能更具视觉效果。选择适用于1-5个字符的字段的宽度,然后选择宽度为6-10,然后选择11-20,20-30,30-50等。这样,您可以避免出现奇怪的视觉对齐问题如果你试图垂直堆叠29,32和27个字符的字段。

答案 3 :(得分:0)

对于可变宽度字体,这几乎是不可能的。

我猜你可以尝试找一个相对“宽”的角色,但这仍然可能导致问题。

最简单的解决方案可能是找到一个令人满意的字符宽度(并且可能对每个字体大小/族进行硬编码),然后简单地将其乘以最大长度。

答案 4 :(得分:0)

根据到目前为止的说法,我认为在这种情况下理想的解决方案是John的建议与Mitchel提出的建议相结合并且过度使用。所以,我将使用标准字符(比如“C”)计算长度,然后将宽度设置为[border slack] +([字符长度] *([字符数] + [5 - 数字]人物Mod 5]))。

每次字体更改时,我都必须重新计算字符长度和字段宽度。