RichTextBox
的字体设置为等宽字体Courier New
,然后使用String.Format
添加文本到RichTextBox
中,并设置对齐方式以使乘法结果右对齐(使用正数)或左对齐(使用负数):var n = 5;
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
this.richTextBox1.AppendText(string.Format("{0,3}", i * j));
}
this.richTextBox1.AppendText(Environment.NewLine);
}
不必使用{0,3}
格式化结果,您可以使用下面的代码根据最大字符长度格式化属于n*n
的数字:
左对齐:
string.Format("{0,-" +((n*n).ToString().Length + 1).ToString() +"}", i * j)
右对齐:
string.Format("{0," +((n*n).ToString().Length + 1).ToString() +"}", i * j)
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;
myNumber
中),输出只是一个字符串(而不是richTextBox1.Text
),但它应该展示了它的工作原理。Environment.NewLine
代替\n
),但这远非最佳方案,你应该构建字符串(使用StringBuilder
)并一次性赋值,而不是添加到Text
属性中。我用这种方法制作了一个fiddle,内存消耗减少了30多mb(仅为几kb),只需使用StringBuilder
即可。"\t"
。 "\t"
将被评估为制表符字符。for (int i = 1; i <= Convert.ToInt32(textBox1.Text); i++)
{
for (int j = 1; j <= Convert.ToInt32(textBox1.Text); j++)
{
richTextBox1.Text += Convert.ToString(i * j) + "\t "; //here at the end
}
richTextBox1.Text += "\n";
}
但是重要的是,选项卡需要有固定的宽度。如果您的数字太长,您需要使用两个选项卡来显示短数字。但对于像您这样的小表格,这不是问题。
你可以使用SelectionTabs
属性来改变选项卡的位置:this.richTextBox1.SelectionTabs = new[] { 20, 40, 60, 80 };
顺便提一下,你应该使用StringBuilder
将多个字符串部分连接成一个字符串。并且最好只在第一次迭代时从textBox1解析数字,而不是每次迭代都解析。
var sb = new StringBuilder(); //In namespace System.Text
var x = Convert.ToInt32(textBox1.Text); //parse only once
for (int i = 1; i <= x; i++)
{
for (int j = 1; j <= x; j++)
{
sb.Append(Convert.ToString(i * j));
sb.Append("\t ");
}
sb.Append("\n");
}
richTextBox1.Text += sb.ToString();
richTextBox1.Text += Convert.ToString(i * j) + "\t";
- cylonRichTextBox
的字体设置为Courier New
,然后通过填充乘法结果的方式将文本添加到RichTextBox
中:this.richTextBox1.AppendText(string.Format("{0,3}", i * j)); - Reza Aghaei