检查文本是否超出文本框的大小

时间:2014-05-21 12:04:58

标签: c# winforms textbox

我有一个Windows多行TextBox并且是只读的。我可以检查其中的文本是否已到达结尾?我的目的是在文本大于TextBox容量时启用滚动。

2 个答案:

答案 0 :(得分:6)

尝试此操作以检查字符串宽度是否小于文本框宽度:

if(TextRenderer.MeasureText(txtBox.Text, txtBoxFont).Width < txtBox.Width)

答案 1 :(得分:1)

简单,不浪费你的时间解决方案就是将垂直滚动条设置为始终可见。如果没有必要,它将不会做任何事情。但它也不会伤害任何可见的东西。这基本上是所有文本编辑器,文字处理器和无数其他应用程序。

如果你坚持计算是否需要滚动条,你可以做到,但这需要相当多的工作。您将使用TextRenderer.MeasureText method来确定控件正在显示的文本的大小(以像素为单位)。请务必使用允许传递与TextBox控件属性对应的字体,大小,文本格式标志的重载。
(注意你想要使用Graphics.MeasureString方法;它使用GDI +,而TextBox控件在内部使用GDI,因此结果将是不准确的。)

您将代码插入到TextChanged event的处理程序中,以便每次更新TextBox的内容时它都会重新计算所需的大小。

哦,一旦你编写了代码并开始测试它,你会发现一个奇怪的错误。它会花费你一段时间来识别它,但我会省去你的麻烦:你将忘记考虑滚动条本身的宽度!当隐藏滚动条时,稍微多一些文本将适合控件的客户区域。通过允许滚动条的宽度来解决此问题,您可以通过查询SystemInformation.VerticalScrollBarWidth property来确定滚动条的宽度。

您可能也会开始接受测试人员的投诉,认为该应用已变得迟钝。这是有道理的 - 每次TextBox中的文本发生变化时,您都在重新计算。您可以对代码进行一些小的优化,但这个解决方案不会非常有效。