首先,How to measure width of character precisely?回答的问题对于这种情况并没有真正帮助,所以这不是重复的.
我有一个字符串.我绘制使用graphics.DrawString,但是当我需要在它之后添加另一个时,我需要知道前一个字符串的精确宽度.
为此,我使用graphics.MeasureString:
StringFormat format = new StringFormat(StringFormat.GenericTypographic);
format.Alignment = StringAlignment.Center;
format.Trimming = StringTrimming.None;
format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces;
Run Code Online (Sandbox Code Playgroud)
我已经尝试了许多其他功能,就像TextRendered.MeasureText所有功能都失败一样,所有可能的参数组合.
MeasureString的上述组合最接近我的需要(它在大多数情况下都适用,特殊字符除外),但是使用像#破坏它这样的字符.宽度更短或更长.
有没有办法获得DrawString函数生成的文本的精确大小?DrawString如何计算绘图区域的大小?它必须显然是一些其他功能,因为尺寸总是不同的.
整个应用程序的源代码在这里https://gitorious.org/pidgeon/pidgeon-main/ (我使用它的文件,是https://gitorious.org/pidgeon/pidgeon-main/blobs/master/scrollback /SBABox.cs)
这与字符串的大小无关.
我指定了绘制字符串的字体.现在我需要1个字符的精确宽度(以像素为单位).我只允许具有静态字符宽度的字体(W和i在绘制时具有相同的宽度).如果我使用大小为10的"Consolas",我的估计宽度为7.75f.我可以直接以某种方式检索此信息吗?
绘图时我不需要这些信息,但是当我想设置光标位置等时,我不知道光标下面有什么文字.
编辑: MeasureString给我11.99653作为字符宽度.不知道为什么.但我不能使用这个值.我估计7.75f而且非常精确.如果我想改变字体大小,我会遇到麻烦.