如果你想使用空间对齐,你需要使用等宽字体(如快递,或索拉),否则,你可以使用标签:号码也不会一致,虽然这种方式,并且由于例程中的数字可能会变得相当大,所以最终可能会导致您的数字超出制表符分隔范围,并且如果发生这种情况,将会在对齐方式中产生不一致。
作为一般规则,如果要对齐任何类型的文本框,请使用等宽字体。
可以用空格填充,例如,使用String.PadLeft
或String.PadRight
。
这将是一样简单改变:
richTextBox1.Text += Convert.ToString(i * j) + " ";
随着
richTextBox1.Text += Convert.ToString(i * j).PadLeft(5);
然而这将假设所有数字在宽度最大5个字符。
为了您的日常精确,你可以尽管计算的最大宽度,所以你最终的东西,如:
// convert your input only once
int myNumber = Convert.ToInt32(textBox1.Text);
// pad with the maximum possible length, plus one space
int padAmount = (myNumber * myNumber).ToString().Length + 1;
for (int i = 1; i <= myNumber; i++)
{
for (int j = 1; j <= myNumber; j++)
{
// pad your input by the amount of spaces needed to fit all possible numbers
richTextBox1.Text += (i*j).ToString().PadLeft(padAmount);
}
}
// use Environment.NewLine instead of `\n`
richTextBox1.Text += Environment.NewLine;
这里有一个fiddle。这是(为显而易见的原因)控制台,所以在我的小提琴输入号码是固定的(它在myNumber
)和输出只是一个字符串(而不是richTextBox1.Text
),但它应该显示它如何工作。
虽然我做了一些改变(我只转换输入的号码一次,并使用Environment.NewLine
代替\n
),这是很不理想,虽然,你应该建立你的字符串(使用StringBuilder
),并在其分配一次,而不是添加到Text
属性。我已经用这种方法制作了fiddle,并且仅通过使用StringBuilder
就可以减少30mb的内存消耗(仅为几个kb)。
来源
2016-02-28 20:49:22
Jcl
尝试使用tab而不是空格。 'richTextBox1.Text + = Convert.ToString(i * j)+“\ t”;' – cylon
将RichTextBox的字体设置为'Courier New',然后通过填充乘法结果将文本添加到'RichTextBox'中: this.richTextBox1.AppendText(string.Format(“{0,3}”,i * j)); –