吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1483|回复: 18
收起左侧

[已解决] C# 中如何实现字符串的对齐?(附图,不是那种一搜一大把的等距字符)

[复制链接]
ilovecomputer66 发表于 2022-7-27 22:06
本帖最后由 ilovecomputer66 于 2022-7-28 08:56 编辑

画了个图来说明下,要不怕说不清楚
一个文本框中,已经知道第一行的内容(但可能中英文各种混合输入,不能强制用全角显示)
要求后面要写的第2行以后的,前面计算出应该空多少个空格,然后使得与第一行末尾对齐
但即便都是英文字母,不同字母的宽度也不同,这可怎么计算应该用多少用空格能等价(可不是简单的求第一行字符数就行。也不是认为英文等于1个空格,中文是2个。还是我局的例子,i  和 M 的宽度都差那么多)


无标题.png

___________________________________________________________


我想当然的,以为这种方法可以

[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()}对齐了没?");



结果效果打了我的脸,根本不对。但不明白为什么不对。理论上感觉没问题啊
22222.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

weiguamg 发表于 2022-7-27 22:14
谢谢分享!!!!

免费评分

参与人数 1吾爱币 -4 收起 理由
落红护花 -4 真有意思

查看全部评分

bmpt 发表于 2022-7-27 22:34
dukegarden 发表于 2022-7-27 22:48
这个应该跟字体有关吧,如果字体本身就不是等宽的,那么每个字符的宽度也不一定是空格的整数倍吧
ljygs565 发表于 2022-7-27 23:06
_(:з」∠)_空格的话,只要字符的宽度不是空格宽度的整数倍应该就不行吧
Break12580 发表于 2022-7-28 00:12
这需求好夸张,楼主是严重强迫症了啊
 楼主| ilovecomputer66 发表于 2022-7-28 07:08
ljygs565 发表于 2022-7-27 23:06
_(:з」∠)_空格的话,只要字符的宽度不是空格宽度的整数倍应该就不行吧

那理论上至多应该也就相差不到1个空格的距离。但图上看,差的太多了
 楼主| ilovecomputer66 发表于 2022-7-28 07:09
dukegarden 发表于 2022-7-27 22:48
这个应该跟字体有关吧,如果字体本身就不是等宽的,那么每个字符的宽度也不一定是空格的整数倍吧

是跟字体有关。但我用算显示距离的方法,理论上应该可以啊,管他什么字体,计算显示距离总该是没错的
lpm8028 发表于 2022-7-28 07:18
这个本身思路就有问题
414269678 发表于 2022-7-28 08:21
1. 用等宽字体,带中文的那种,例如iosvka,就可以计算文本宽度了。
2. 正常字体宽度不同,文本框估计实现不了你这功能
3. 如果是GUI程序,那应该可以算出来字符串宽度的,自己画,或者算出宽度,2边分别用一个控件。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表