Tag: word wrap

ObjectListView没有自动换行

我使用ObjectListView而不是标准的ListView是因为我想用自动换行列。 我在几个地方读过,为了启用自动换行,我唯一需要做的就是将column.wordWrap设置为true。 我做到了这一点,但它不起作用。 我在这里想念的是什么? 编辑:我现在意识到我需要绘制我的列所有者。 我发现这个页面告诉我该怎么做,但我不知道把它放在我的代码中的哪个位置。 我也不太确定是否需要在委托中添加某些属性以允许自动换行(通过看起来opf它默认启用它)。 事情是,我尝试了我在这个页面找到的东西,一字一句地复制它,我的列表看起来完全一样……

计算字符串宽度(以像素为单位)时的奇怪行为,以模拟自动换行

试图在C#中获取字符串宽度来模拟wordwrap和文本的位置(现在用richTextBox编写)。 richTextBox的大小是555×454像素,我使用等宽字体Courier New 12pt。 我尝试了TextRenderer.MeasureText()以及Graphics.MeasureString()方法。 TextRenderer返回的值大于Graphics所以文本通常适合一行,我的代码确定应该包装到其他行。 但是,另一方面,使用Graphics ,我的代码确定特定字符串比原始richTextBox中打印的要短,因此它被错误地包装到下一行。 在调试过程中,我发现计算出的宽度不同,这很奇怪,因为我使用的是等宽字体,所以所有字符的宽度应相同。 但是我从Graphics.MeasureString()得到类似的东西(例如:” – 5.33333254,’S’ – 15.2239571,’\ r’ – 5.328125)。 如何使用C#精确计算字符串宽度,从而模拟自动换行并确定特定的文本位置(以像素为单位)? 使用等宽字体时,为什么不同字符的宽度不同? 注意:我正在开展个人眼动追踪项目,我想确定在实验期间放置特定文本的部分,以便我可以判断用户正在查看哪些文字。 对于前者 在时间t用户正在查看点[256,350] px,我知道在这个地方有方法WriteLine调用。 我的目标视觉刺激是源代码,带有缩进,制表符,行结尾,放置在一些可编辑的文本区域(将来可能是一些简单的在线源代码编辑器)。 这是我的代码: //before method call var font = new Font(“Courier New”, 12, GraphicsUnit.Point); var graphics = this.CreateGraphics(); var wrapped = sourceCode.WordWrap(font, 555, graphics); public static List WordWrap(this string sourceCode, Font font, int […]