本帖最后由 ilovecomputer66 于 2022-7-28 08:56 编辑
画了个图来说明下,要不怕说不清楚
一个文本框中,已经知道第一行的内容(但可能中英文各种混合输入,不能强制用全角显示)
要求后面要写的第2行以后的,前面计算出应该空多少个空格,然后使得与第一行末尾对齐
但即便都是英文字母,不同字母的宽度也不同,这可怎么计算应该用多少用空格能等价(可不是简单的求第一行字符数就行。也不是认为英文等于1个空格,中文是2个。还是我局的例子,i 和 M 的宽度都差那么多)
___________________________________________________________
我想当然的,以为这种方法可以
[C#] 纯文本查看 复制代码 string oneLine = richTextBox1.Text.Trim();
Graphics graph = this.CreateGraphics();
// 算出第一行文字对应的显示宽度
float fLength = graph.MeasureString(oneLine, richTextBox1.Font).Width;
Debug.WriteLine($"第一行显示宽度 = {fLength}");
// 在richTextBox1中,一个空格的宽度
float spaceLength = graph.MeasureString(" ", richTextBox1.Font).Width;
Debug.WriteLine($"一个空格的宽度 = {spaceLength}");
// 算出第一行文本等价于大约几个空格
int needAddSpace = (int)(fLength / spaceLength);
Debug.WriteLine($"needAddSpace = {needAddSpace}");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < needAddSpace; i++)
sb.Append(" ");
richTextBox1.AppendText($"\n{sb.ToString()}对齐了没?");
结果效果打了我的脸,根本不对。但不明白为什么不对。理论上感觉没问题啊
|