检查文本是否超出文本框的尺寸限制

4

我有一个只读的Windows多行文本框。我能否检查其中的文本是否已经到达了末尾?我的目的是在文本超过文本框容量时启用滚动。


文本框的垂直滚动条属性里没有“自动”选项吗? - Stefan
没有我所知道的。我正在使用System.Windows.Forms.TextBox。 - Nitish
1
也许这可以帮助你:https://dev59.com/qHVD5IYBdhLWcg3wJIAK - Stefan
2个回答

8

尝试以下方法检查字符串宽度是否小于文本框宽度:

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

我在System.Windows.Forms中找不到TextRenderer。 - Nitish
你正在使用哪个 .net 框架?尝试添加 "using System.Drawing;" - mrida
1
TextRenderer位于System.Windows.Forms命名空间中,而不是System.Drawing。不知道为什么它对他不起作用。它自2.0版本以来一直是框架的一部分。 - Cody Gray

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

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

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

哦,还有一件事,一旦您编写了代码并开始进行测试,您会注意到一个奇怪的错误。要识别它可能需要一段时间,但我将为您节省麻烦:您将忘记计算滚动条本身的宽度!当滚动条被隐藏时,控件的客户区域将可以容纳更多的文本。通过查询SystemInformation.VerticalScrollBarWidth属性以考虑滚动条的宽度来解决此问题。

您也可能开始收到测试人员的抱怨,说应用程序已变得缓慢。这是有道理的-每次更改TextBox中的文本时都会重新计算。您可能可以对代码进行一些小的优化,但是这种解决方案不会非常高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接