Za pomocą Microsoft Winform controlsnie można poprawnie rozwiązać problemu bez małego obejścia, które wyjaśnię poniżej.
PROBLEM
Problem z prostym użyciem "\t"lub vbTabpolega na tym, że gdy wyświetla się więcej niż jeden TextBox i że wyrównanie musi być przestrzegane dla wszystkich TextBox, TYLKO "\t"lub vbTabrozwiązanie wyświetli coś, co NIE ZAWSZE jest poprawnie wyrównane.
Przykład w 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
wyświetli się

jak widać, agewartość for François-Victorjest przesunięta w prawo i nie jest wyrównana z agewartością dwóch innych TextBox.
ROZWIĄZANIE
Aby rozwiązać ten problem, należy ustawić pozycję Tabs przy użyciu określonej SendMessage()funkcji API user32.dll, jak pokazano poniżej.
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
i wyświetlony zostanie następujący formularz

Teraz widać, że wszystkie wartości są poprawnie wyrównane :-)
UWAGI
MultilineWłaściwość TextBox musi być ustawiona na True . Jeśli ta właściwość jest ustawiona na False, karta jest pozycjonowana jak poprzednio.
Sposób AcceptsTabprzypisania własności nie jest ważny (przetestowałem).
To pytanie zostało już potraktowane na StackOverflow
Uwaga: jednostka miary dla pozycji Tab nie jest znakiem, ale czymś, co wydaje się mieć 1/4 znaku. Dlatego mnożę długość przez 4.
C # ROZWIĄZANIE
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);
}
}
}