Usando Microsoft Winform controls
, é impossível resolver corretamente o seu problema sem uma pequena solução alternativa que explicarei abaixo.
PROBLEMA
O problema do uso simples "\t"
ou vbTab
é que, quando mais de um TextBox são exibidos e esse alinhamento deve ser respeitado para todos os TextBox, o ONLY "\t"
ou a vbTab
solução exibirá algo que NÃO SEMPRE está alinhado corretamente.
Exemplo no 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
Exibirá
como você pode ver, o age
valor de François-Victor
é deslocado para a direita e não está alinhado com o age
valor de outros dois TextBox.
SOLUÇÃO
Para resolver esse problema, você deve definir a posição das guias usando uma SendMessage()
função específica da API user32.dll, conforme mostrado abaixo.
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
e o formulário a seguir será exibido
Você pode ver que agora, todos os valores estão alinhados corretamente :-)
OBSERVAÇÕES
Multiline
A propriedade TextBox deve ser definida como True . Se essas propriedades estiverem definidas como Falso, a guia estará posicionada como antes.
Como a AcceptsTab
propriedade é atribuída não é importante (eu testei).
Esta questão já foi tratada no StackOverflow
Cuidado: a unidade de medida para a posição da guia não é caractere, mas algo que parece ter 1/4 de caractere. É por isso que multiplico o comprimento por 4.
SOLUÇÃO C #
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);
}
}
}