Вставка символа табуляции в текст с помощью C#

Я создаю приложение, в котором я должен захватить несколько значений и построить текст с ними: Имя, Возраст и т.д.

На выходе будет обычный текст в TextBox.

Я пытаюсь сделать так, чтобы эта информация отображалась в виде колонок, поэтому я пытаюсь разделить их табом, чтобы сделать это более понятным.

Например, вместо того, чтобы иметь:

Ann 26
Sarah 29
Paul 45

я бы хотел, чтобы это отображалось как:

Энн tab 26 Сара tab 29 Пол tab 45

Подскажите, как "вставить" табуляцию в текст?

Комментарии к вопросу (2)
Решение

Попробуйте использовать символ \t в своих строках

Комментарии (0)

Хазар прав со своим \t. Вот'полный список управляющих символов для C#:

\' для одиночной кавычки.

\" для двойной кавычки.

`\\\ для обратной косой черты.

\0 для нулевого символа.

\a для символа предупреждения.

\b для обратного пробела.

\f для ввода формы.

\n для новой строки.

\r для возврата каретки.

\t для горизонтальной табуляции.

\v для вертикальной табуляции.

\uxxxx для шестнадцатеричного значения символа юникода (например, \u0020).

\x - то же самое, что и \u, но вам не нужны ведущие нули (например, \x20).

\Uxxxxxxx для шестнадцатеричного значения символа юникода (более длинная форма необходима для генерации суррогатов).

Комментарии (2)

Также может быть полезно использовать String.Format, например.

String.Format("{0}\t{1}", FirstName,Count);
Комментарии (1)
var text = "Ann@26"

var editedText = text.Replace("@", "\t");
Комментарии (0)

Есть несколько способов сделать это. Самое простое-это использовать \T в ваш текст. Однако, это's возможно, что не'т работать в некоторых ситуациях, как PdfReport пакетов NuGet.

Комментарии (1)

С помощью Майкрософт Winform управления, невозможно правильно решить вашу проблему без небольшой обходной путь, который я объясню ниже.

Проблема

Проблема в Через просто в "\Т" У или vbTab-это когда больше чем одно текстовое поле отображаются и согласования должны соблюдаться на всем поле, только в"\Т" УилиvbTab решение будет отображать то, что не всегда правильно.

Пример VB.Net:

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

будет отображать

как вы можете видеть, возраст значение ФранçОИ-Виктор сдвигается вправо и не совпадает с "возраст" значения двух других таблицах.

Решение

Чтобы решить эту проблему, необходимо установить позицию табуляции с помощью специальных метод SendMessage()` функция API user32.dll как показано ниже.

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

и после появится форма

Вы можете видеть, что теперь, все значения правильно :-)

Замечания

Многострочный свойства элемента управления TextBox должен быть установлен в true. Если для этого свойства задано значение false, то на вкладке позиционируется как раньше.

Как AcceptsTab имущества назначается не важно (я проверял).

Этот вопрос уже будет рассматриваться на сайте StackOverflow

Внимание: единицы измерения на закладке позиция не характер, но, то, что кажется 1/4 характера. Именно поэтому я умножаю длину на 4.

С РЕШЕНИЕ №

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        private static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, uint[] lParam);
        private const int EM_SETTABSTOPS = 0x00CB;
        private const char vbTab = '\t';

        public Form1()
        {
            InitializeComponent();

            var tabs = new uint[] { 25 * 4 };

            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);
        }
    }
}
Комментарии (0)
string St = String.Format("{0,-20} {1,5:N1}\r", names[ctr], hours[ctr]);
richTextBox1.Text += St;

Это хорошо работает, но вы должны иметь моноширинный шрифт.

Комментарии (0)

При использовании символьных строк (начать с @ТО") это может быть легче

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

В результате Яблоко:<вкладка>Боб

Комментарии (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));

Это будет заполнить строку пробелами слева или справа.

Комментарии (0)