C# 如何整齐地对齐文本框中的文本,并在导出到.txt时将其保留
我有一个愚蠢的小问题,我希望你们能加入你们的经验 我需要一个包含以下(动态)数据的文本框: 但盒子里的文字才是问题所在。 到目前为止,我正在使用名为C# 如何整齐地对齐文本框中的文本,并在导出到.txt时将其保留,c#,winforms,textbox,C#,Winforms,Textbox,我有一个愚蠢的小问题,我希望你们能加入你们的经验 我需要一个包含以下(动态)数据的文本框: 但盒子里的文字才是问题所在。 到目前为止,我正在使用名为SB的StringBuilder制作所有这些文本,最后我设置了MyTextBox.text=SB.ToString() 我将标题设置在框内,如下所示: SB.AppendLine("Name\t\Amount:"); SB.AppendLine(name + "\t\t" + amount); TEXT TEXT TEXT TEXT _____
SB
的StringBuilder
制作所有这些文本,最后我设置了MyTextBox.text
=SB.ToString()
我将标题设置在框内,如下所示:
SB.AppendLine("Name\t\Amount:");
SB.AppendLine(name + "\t\t" + amount);
TEXT
TEXT
TEXT
TEXT
__________________
Navn Antal:
SpecSaver 1
MadEyes 1
Gucci 1
__________________
using(var text = new StreamWriter("textfile.txt", false))
{
text.Write(SB);
}
我在循环中生成如下数据:
SB.AppendLine("Name\t\Amount:");
SB.AppendLine(name + "\t\t" + amount);
TEXT
TEXT
TEXT
TEXT
__________________
Navn Antal:
SpecSaver 1
MadEyes 1
Gucci 1
__________________
using(var text = new StreamWriter("textfile.txt", false))
{
text.Write(SB);
}
但它不像我的例子那样整齐地对齐!
如果名称比前一个名称长,则金额将显示在行中完全不同的位置-与前一个名称相比
外汇。像这样:
SB.AppendLine("Name\t\Amount:");
SB.AppendLine(name + "\t\t" + amount);
TEXT
TEXT
TEXT
TEXT
__________________
Navn Antal:
SpecSaver 1
MadEyes 1
Gucci 1
__________________
using(var text = new StreamWriter("textfile.txt", false))
{
text.Write(SB);
}
我的第一个问题:我如何防止这种情况?当您需要多行文本框来包含大量数据时,通常会做什么。
我的第二个问题:当我将其导出为.txt文档时,如下所示:
SB.AppendLine("Name\t\Amount:");
SB.AppendLine(name + "\t\t" + amount);
TEXT
TEXT
TEXT
TEXT
__________________
Navn Antal:
SpecSaver 1
MadEyes 1
Gucci 1
__________________
using(var text = new StreamWriter("textfile.txt", false))
{
text.Write(SB);
}
它给出了数据的另一个版本,完全不一致。它应该与MyTextBox.Text相同。以(不完全)回答您的第一个问题。您需要计算字符串中的字符数,而不是为每个字符串使用相同数量的制表符,因为它可能包含一个、两个或多个“制表符”的额外字符。例如,考虑以下两个字符串:
"Hi"
"Hello there"
如果在每个选项卡上添加相同数量的选项卡,则第二个选项卡仍然会更长,假设选项卡为4个空格
您可以在开始添加选项卡之前手动执行此操作,然后只添加足够的选项卡以使长度达到所需的长度,或者您可以使用format语句(请参阅Eoin的答案)
回答你的第二个问题。在计算了初始文本的长度后,您可以添加所需的空格数,而不是制表符数,然后,假设您使用的是非比例字体,数字将始终对齐。使用固定间距字体实现字符对齐-选择类似于
courier new
的字体作为文本框和打印的字体
请参阅(可能您的消息框显示的是可变间距字体?。首先,您需要为文本框选择一种字体 接下来,您可以提供一个to
string.Format()
(或至StringBuilder.AppendFormat
)
结果:
Title 1 Title 2
Val Col 1 A Val Col 2 A
Val Col 1 B Val Col 2 B
您还可以研究.padlift.padrright(int)方法,这些方法在左侧或右侧添加空格以帮助保持对齐
你也可以看看你的字体Curior是guly,但是它的制作使得每个charter都占据了完全相同的空间,比如在其他字体中,我会比a占用更少的空间,如果引起间距问题的只是数字,我可以正确对齐它们
int bigNumber = 1234;
int smallNumber = 5;
string bigNumberString = bigNumber.ToString();
string smallNumberString = smallNumber.ToString();
// This works only in a TextBox with a monospaced font.
textBox1.Text = string.Format("{0,4}\n{1,4}",
bigNumberString,
smallNumberString);
// This works in TextBoxes with any font.
textBox1.Text = string.Format("{0}\n{1}",
bigNumberString,
smallNumberString.PadLeft(bigNumberString.Length, '\u2007'));
使用string.format或stringbuilder.appendformat只需一步,通过使用{0}格式标识指定填充量,我意识到在我发布之后,我想指出OP需要考虑的步骤。我想你的意思是“可以提供”。