我有一个只读的Windows多行文本框。我能否检查其中的文本是否已经到达了末尾?我的目的是在文本超过文本框容量时启用滚动。
尝试以下方法检查字符串宽度是否小于文本框宽度:
if(TextRenderer.MeasureText(txtBox.Text, txtBoxFont).Width < txtBox.Width)
System.Windows.Forms
命名空间中,而不是System.Drawing
。不知道为什么它对他不起作用。它自2.0版本以来一直是框架的一部分。 - Cody GrayTextRenderer.MeasureText
方法 来确定控件显示的文本的大小(以像素为单位)。请确保使用允许您传递字体、大小、文本格式标志的重载,这些标志对应于您的 TextBox 控件的属性。Graphics.MeasureString
方法;它使用 GDI+,而 TextBox 控件在内部使用 GDI,因此结果会不准确。)
您将在TextChanged
事件的处理程序中插入代码,以便每次更新TextBox的内容时重新计算所需的大小。
哦,还有一件事,一旦您编写了代码并开始进行测试,您会注意到一个奇怪的错误。要识别它可能需要一段时间,但我将为您节省麻烦:您将忘记计算滚动条本身的宽度!当滚动条被隐藏时,控件的客户区域将可以容纳更多的文本。通过查询SystemInformation.VerticalScrollBarWidth
属性以考虑滚动条的宽度来解决此问题。
您也可能开始收到测试人员的抱怨,说应用程序已变得缓慢。这是有道理的-每次更改TextBox中的文本时都会重新计算。您可能可以对代码进行一些小的优化,但是这种解决方案不会非常高效。