【问题标题】:Setting Width of Textbox according to maxlenth根据maxlength设置文本框的宽度
【发布时间】:2014-08-22 11:29:05
【问题描述】:

我正在使用 winforms 应用程序,我想设置文本框的宽度,该宽度将显示字符直到最大长度,简而言之,类似于 width = maxlength。有任何预定义的属性吗?还是我们必须手动计算?

//我正在寻找这种类型的逻辑

  private void Form1_Load(object sender, EventArgs e)
    {
        //sample project
        textBox2.Width = textBox2.MaxLength;
        textBox3.Width = textBox3.MaxLength;
        textBox4.Width = textBox4.MaxLength;
    }

【问题讨论】:

  • 请展示你的作品。你试过什么?什么不适合你?你有没有看过文档? msdn.microsoft.com/en-us/library/… ?
  • 单位不匹配:宽度以像素为单位,最大长度以字符为单位。所以你需要使用例如测量字体Graphics.MeasureString.. 最适合 Consolas 等固定字体。
  • 是的,我遇到了 MeasureString ,但它需要文本作为第一个参数。我只想在初始阶段设置大小..
  • @TaW 的评论可能应该作为答案发布,但只是为了扩展它,如果您希望文本框在您输入时动态调整大小,您需要使用 TextChanged 事件你的文本框来调整它的大小。
  • @AdrianoSantros 在知道框中的文本内容之前,您不知道需要什么宽度。您可能会在所使用的字体中找到最宽的字符并将其用作最坏的情况。 (尽管您无法确定用户正在使用什么字体,除非您强制使用特定字体 - 我会不惜一切代价避免)。

标签: c# winforms


【解决方案1】:

您的单位不匹配:宽度以像素为单位,最大长度以字符为单位。

所以你需要使用例如测量字体Graphics.MeasureString.. 最适合 Consolas 等固定字体。

您可以测量字体,例如像这样,使用 'x' 作为中等宽度的字母:

using (Graphics G = textBox2.CreateGraphics())
   textBox2.Width = (int) (textBox2.MaxLength * 
                           G.MeasureString("x", textBox2.Font).Width);

您可以使用其他字体测量方法,例如TextRenderer.MeasureText;两种方法都有options 来微调测量。上面的默认设置会包含一些余地。

如果您使用固定字体,则宽度是可以的,如果不这样做,您需要决定是否更安全(使用“W”或“M”来衡量) . “X”是一个可能的妥协。或者您可以在例如动态适应TextChanged 事件..

【讨论】:

  • "i" 对于大多数字体来说会很薄,但是任何适合你的对我来说都很好..顺便说一句:在排版和 HTML 中都有不同宽度的空格字符,都更薄-space”比普通空间更厚,例如“en-space”或“em-space”..
【解决方案2】:

使用 Anchor 属性定义控件在调整其父控件大小时如何自动调整大小 将控件锚定到其父控件可确保在调整父控件大小时,锚定的边缘相对于父控件的边缘保持在相同的位置。

【讨论】:

    【解决方案3】:

    试试这个:

    textbox1.MaxLength = 0//The default value is 0, which indicates no limit;
    

    请参阅此 msdn 链接了解更多信息:

    msdn link for textbox maxlength

    【讨论】:

    • 不,我想根据最大长度设置文本框的大小。最大长度可以是 10,25 或 35
    猜你喜欢
    • 2011-03-02
    • 2015-04-29
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多