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

时间:2018-07-31 09:21:49

标签: c# winforms fonts

我正在尝试写一些可以填充字符串列表的内容,因此每个字符串的大小都相同 用空格填充非常简单,只需获得最大长度并用空格填充,直到它们相等为止

但是我的问题是字体宽度不相等。

例如,如果我们有

aa

万维网

我们将aa填充一个空格并获得

aa

万维网

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

我编写了一个脚本,该脚本尝试计算所讨论字符串的物理大小,并用空格填充,直到大小相等为止。

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);
        }

但是,正如您所见,这没有用

MyImage

任何想法都会受到赞赏

2 个答案:

答案 0 :(得分:0)

您可以尝试将unicode用于其他Spaces,其中一些是完全通用的,与字体无关。

答案 1 :(得分:0)

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

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

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);

MyImage