首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与空格和字体相关的C#填充字符串

与空格和字体相关的C#填充字符串
EN

Stack Overflow用户
提问于 2018-07-31 17:21:49
回答 2查看 164关注 0票数 0

我正在尝试写一些东西来填充一个字符串列表,这样每个字符串都是相同大小的,用空格填充是相当简单的,你只需要得到最大长度并用空格填充,直到它们相等

然而,我的问题是字体宽度不相等。

例如,如果我们有

aa

WWW

我们用一个空格填充aa,然后得到

aa

WWW

因为这些字体的宽度不相等,所以它们不起作用。

我已经写了一个脚本,试图计算有问题的字符串的物理大小,并用空格填充,直到大小相等。

代码语言:javascript
复制
StreamReader sr = new StreamReader(@"C:\Users\ben.bodie\Desktop\FontPaddingTest.txt");
        var lines = sr.ReadToEnd().Split(new string[] { Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries).ToList();
        sr.Close();
        sr.Dispose();
        var max = 0;
        var spacesize = TextRenderer.MeasureText(" ", new Font("Microsoft Sans Serif", 7.8f));
        foreach (var line in lines)
        {
            var size = TextRenderer.MeasureText(line, new Font("Microsoft Sans Serif", 7.8f));
            max = Math.Max(max, size.Width);
        }
        foreach(var line in lines)
        {
            var newline = line;
            var size = TextRenderer.MeasureText(newline, new Font("Microsoft Sans Serif", 7.8f));
            var width = size.Width;
            int spacestoadd = 0;
            while(max-10 > width)
            {
                newline = " " + newline;
                width = width + spacesize.Width;
                spacestoadd++;
            }
            dataGridView1.Rows.Add(newline, spacestoadd);
        }

但是,正如您所看到的,这并不起作用

任何想法都将不胜感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-31 18:52:56

我对此做了一些修改,并认为我已经解决了它

我并没有增加空间的大小,而是在添加空格的循环的每次迭代中重新计算大小

代码语言:javascript
复制
var newline = line;
            var size = TextRenderer.MeasureText(newline, new Font("Microsoft Sans Serif", 7.8f));
            var width = size.Width;
            int spacestoadd = 0;
            while(max-10 > width)
            {
                newline = " " + newline;
                 size = TextRenderer.MeasureText(newline, new Font("Microsoft Sans Serif", 7.8f));
                 width = size.Width;
                spacestoadd++;
            }
            dataGridView1.Rows.Add(newline, spacestoadd);

票数 0
EN

Stack Overflow用户

发布于 2018-07-31 17:29:49

您可以尝试对不同的Spaces使用unicode,其中一些是完全通用的,不依赖于字体。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51609868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档