我正在尝试写一些东西来填充一个字符串列表,这样每个字符串都是相同大小的,用空格填充是相当简单的,你只需要得到最大长度并用空格填充,直到它们相等
然而,我的问题是字体宽度不相等。
例如,如果我们有
aa
WWW
我们用一个空格填充aa,然后得到
aa
WWW
因为这些字体的宽度不相等,所以它们不起作用。
我已经写了一个脚本,试图计算有问题的字符串的物理大小,并用空格填充,直到大小相等。
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);
}但是,正如您所看到的,这并不起作用

任何想法都将不胜感激
发布于 2018-07-31 18:52:56
我对此做了一些修改,并认为我已经解决了它
我并没有增加空间的大小,而是在添加空格的循环的每次迭代中重新计算大小
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);

发布于 2018-07-31 17:29:49
您可以尝试对不同的Spaces使用unicode,其中一些是完全通用的,不依赖于字体。
https://stackoverflow.com/questions/51609868
复制相似问题