C# 检查控件文本是否过长,以便显示

C# 检查控件文本是否过长,以便显示,c#,winforms,C#,Winforms,如果翻译后的应用程序的字符串仍然适合现有的UI,我将尝试进行一些自动测试。翻译过程只需要一个现有的资源程序集来翻译包含的资源,并为新语言创建一个新的资源程序集。很简单,但这样就不能保证翻译仍然适合用户界面。用户界面不参与翻译过程,可能会被截断。因此,对于自动检查,我需要了解如何在UI上查找截断的文本 到目前为止,我试过: 测量控件的客户端大小、测量文本长度和 比较一下。不起作用,因为似乎没有办法找到答案 用于放置文本的控件的~real~客户端大小 例如,按钮不仅仅是尺寸减去填充 将AutoSiz

如果翻译后的应用程序的字符串仍然适合现有的UI,我将尝试进行一些自动测试。翻译过程只需要一个现有的资源程序集来翻译包含的资源,并为新语言创建一个新的资源程序集。很简单,但这样就不能保证翻译仍然适合用户界面。用户界面不参与翻译过程,可能会被截断。因此,对于自动检查,我需要了解如何在UI上查找截断的文本

到目前为止,我试过:

测量控件的客户端大小、测量文本长度和 比较一下。不起作用,因为似乎没有办法找到答案 用于放置文本的控件的~real~客户端大小 例如,按钮不仅仅是尺寸减去填充 将AutoSize设置为true并检查控件是否增长。那个 只适用于非换行控件,而且似乎有 这里没有严格的限制。控件可能会增长以适合其上的文本 设置“自动调整大小”时的曲面,但文字在此之前已拟合 而且页边空白可能很窄,但文字在哪里 适合的
还有其他可行的想法吗?或者有没有什么特效药可以让上述方法发挥作用?如果有一个简单的Win API方法,我可以调用它,它只给我控件的实际显示文本,而不是程序员/程序希望在控件上显示的文本,那就太好了。

从非翻译版本中获取字符的数量,并将它们与翻译版本的长度区分开来,然后相乘电流通过差值控制宽度。它可能看起来像这样

float scalingAmount = 0.1 //This is just an example value, you'd probably want to adjust this yourself
float difference = oldLabel.Text.Length - label.Text.Length;
label.Width = oldLabel.Width * (difference/scalingAmmount)

如果可以在控件上启用自动调整大小并使UI自动调整为更长的文本,为什么需要检查截断的文本?我尝试设置自动调整大小只是为了测试实际应用程序上未设置的文本。测试可能类似于,在程序集中查找所有表单/用户控件,实例化它们,显示它们,设置自动调整所有控件的大小,并比较自动调整大小之前和之后的大小。正如我所说的那样,这并不奏效。由于明显的原因,未测试已设置自动调整大小的控件。它们是安全的。请发表评论,这样如果您发现问题,我就可以解决问题。是的,我知道您正在构建检测截断文本的工具,大概是用来告诉翻译人员缩短这些翻译的。但我的意思是:如果你能让真正的应用程序自动调整所有控件的大小,那么就不需要这样的工具了,对吧?或者,在这种情况下,您是否会遇到控件重叠的问题?我对WinFormsI不太熟悉,我可以在testtool的上下文中使UI的单个控件在运行时自动调整大小,以查看控件增长时会发生什么。实际的应用程序不会自动调整控件的大小,因为在大多数情况下都不是这样设计的。是的,只要在任何地方更改自动调整大小都会导致重叠和其他类型的问题。这可能会给单间距字体带来好的效果。但这些并没有在典型的UI中使用。塔荷马肯定不是单间隔的。但是,是的,这背后的想法,不是直接与用户界面进行比较,而是与现有的翻译进行比较,我知道这是一个合适的翻译,是另一个选择。@Ralf确实如此。您可能需要查看字体类以了解如何获得该长度。