使用C#将制表符插入文本

时间:2008-12-14 03:22:08

标签: c# .net

我正在构建一个应用程序,我应该在其中捕获多个值并使用它们构建文本:NameAge等。

输出将是TextBox的纯文本。

我正在尝试将这些信息显示为columns,因此我尝试将它们与tab分开以使其更清晰。

例如,而不是:

Ann 26
Sarah 29
Paul 45

我希望它显示为:

Ann 标签 26 Sarah 标签 29保罗标签 45

关于如何insert标签插入我的文字的任何提示?

9 个答案:

答案 0 :(得分:425)

尝试在字符串中使用\t字符

答案 1 :(得分:406)

哈扎尔与他的\t是对的。以下是C#的转义字符的完整列表:

\'单引号。

\"获得双引号。

\\反斜杠。

\0表示空字符。

\a表示警告字符。

\b用于退格。

\f表单Feed。

\n换行。

\r回车。

\t表示水平标签。

\v表示垂直标签。

\uxxxx表示unicode字符十六进制值(例如\u0020)。

\x\u相同,但您不需要前导零(例如\x20)。

\Uxxxxxxxx表示unicode字符十六进制值(生成代理项所需的更长形式)。

答案 2 :(得分:70)

使用String.Format,例如

也很有用
String.Format("{0}\t{1}", FirstName,Count);

答案 3 :(得分:3)

var text = "Ann@26"

var editedText = text.Replace("@", "\t");

答案 4 :(得分:2)

有几种方法可以做到这一点。最简单的方法是在文本中使用\t。但是,\t可能在某些情况下不起作用,例如PdfReport nuget包。

答案 5 :(得分:2)

string St = String.Format("{0,-20} {1,5:N1}\r", names[ctr], hours[ctr]);
richTextBox1.Text += St;

这很好用,但你必须有一个单行间距的字体。

答案 6 :(得分:1)

使用Microsoft Winform controls,如果没有我将在下面解释的小变通办法,就不可能正确解决您的问题。

问题

仅使用"\t"vbTab的问题是,当显示多个TextBox且所有TextBox必须遵守对齐方式时,仅"\t"或{{1} }解决方案将显示始终未正确对齐的内容。

VB.Net中的示例:

vbTab

将显示

enter image description here

如您所见,Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load TextBox1.Text = "Bernard" + vbTab + "32" TextBox2.Text = "Luc" + vbTab + "47" TextBox3.Text = "François-Victor" + vbTab + "12" End Sub 的{​​{1}}值向右移动,并且与其他两个TextBox的age值不对齐。

解决方案

要解决此问题,必须使用特定的François-Victor user32.dll API函数来设置Tabs位置,如下所示。

age

并显示以下表格

enter image description here

您现在可以看到,所有值都正确对齐:-)

备注

文本框的

SendMessage()属性必须设置为True 。如果将此属性设置为False,则选项卡将像以前一样放置。

如何分配Public Class Form1 Public Declare Function SendMessage _ Lib "user32" Alias "SendMessageA" _ ( ByVal hWnd As IntPtr _ , ByVal wMsg As Integer _ , ByVal wParam As Integer _ , ByVal lParam() As Integer _ ) As Integer Private Const EM_SETTABSTOPS As Integer = &HCB Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim tabs() As Integer = {4 * 25} TextBox1.Text = "Bernard" + vbTab + "32" SendMessage(TextBox1.Handle, EM_SETTABSTOPS, 1, tabs) TextBox2.Text = "Luc" + vbTab + "47" SendMessage(TextBox2.Handle, EM_SETTABSTOPS, 1, tabs) TextBox3.Text = "François-Victor" + vbTab + "12" SendMessage(TextBox3.Handle, EM_SETTABSTOPS, 1, tabs) End Sub End Class 属性并不重要(我已经测试过)。

此问题已在StackOverflow

上得到处理

警告:制表符位置的度量单位不是字符,而是看起来是字符的1/4。这就是为什么我将长度乘以4。

C#解决方案

Multiline

答案 7 :(得分:0)

使用文字字符串(以@“开头)时,这可能会更容易

>>> text = "Université de Montréal"
>>> print(u"This is unicode: {}".format(text))
>>> This is unicode: Université de Montréal

会导致char tab = '\u0009'; string A = "Apple"; string B = "Bob"; string myStr = String.Format(@"{0}:{1}{2}", A, tab, B);

答案 8 :(得分:0)

除了上面的辅助功能,您还可以使用PadLeft或PadRight:

string name = "John";
string surname = "Smith";

Console.WriteLine("Name:".PadRight(15)+"Surname:".PadRight(15));
Console.WriteLine( name.PadRight(15) + surname.PadRight(15));

这将在字符串的左侧或右侧填充空格。