我有一个Windows多行TextBox并且是只读的。我可以检查其中的文本是否已到达结尾?我的目的是在文本大于TextBox容量时启用滚动。
答案 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中的文本发生变化时,您都在重新计算。您可以对代码进行一些小的优化,但这个解决方案不会非常有效。