如何知道文本框是否包裹了行?

时间:2011-12-06 14:03:36

标签: vb.net winforms

我正在尝试在调整大小时更改文本框的字体,以显示最适合的字体大小,但保留原始文本的行数。但我还没有知道是否包裹了行,以减少字体大小。

你能告诉我这是怎么做的吗?

3 个答案:

答案 0 :(得分:3)

仅通过引用组件的方法或属性无法实现。

您需要使用EM_GETLINECOUNT message

示例代码(从原始code sample in Visual Basic转换为C#):

using System.Runtime.InteropServices;

public class Form1
{    
    private const int EM_GETLINECOUNT = 0xba;
    [DllImport("user32", EntryPoint = "SendMessageA", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
    private static extern int SendMessage(int hwnd, int wMsg, int wParam, int lParam);

    private void TextBox1_TextChanged(System.Object sender, System.EventArgs e)
    {
        var numberOfLines = SendMessage(textBox1.Handle.ToInt32(), EM_GETLINECOUNT, 0, 0);
    }
}

我已经测试了它并且它有效。

答案 1 :(得分:2)

如果想要精确查看字符串长度,System.Drawing.Graphics对象有一个Measure String函数。

     System.Drawing.SizeF  len2 = graphic.MeasureString(*text*, *font*);

它没有考虑前导空格,所以对于我的测量,我使用这样的东西来代替通常接近尺寸的'X'的空格。

     if (ibText.Content.Length > 0 && ibText.Content[0] == ' ')
           len2 = graphic.MeasureString(ibText.Content.Replace(' ', 'X'), ibText.Font);

答案 2 :(得分:0)

也许您可以将文本框包装在ViewBox中:它将完成为您调整大小的工作。