Usando Microsoft Winform controls
, è impossibile risolvere correttamente il tuo problema senza una piccola soluzione che spiegherò di seguito.
PROBLEMA
Il problema nell'uso semplice "\t"
o vbTab
è che quando vengono visualizzati più di un TextBox e tale allineamento deve essere rispettato per tutti i TextBox, l'UNICO "\t"
o la vbTab
soluzione visualizzeranno qualcosa che NON È SEMPRE allineato correttamente.
Esempio in 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
verrà visualizzato
come puoi vedere, age
value for François-Victor
viene spostato a destra e non è allineato con il age
valore di altri due TextBox.
SOLUZIONE
Per risolvere questo problema, è necessario impostare la posizione delle schede utilizzando una SendMessage()
funzione API user32.dll specifica come mostrato di seguito.
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 verrà visualizzato il seguente modulo
Ora puoi vedere che tutti i valori sono allineati correttamente :-)
OSSERVAZIONI
Multiline
La proprietà di TextBox deve essere impostata su True . Se questa proprietà è impostata su False, la scheda viene posizionata come prima.
Come la AcceptsTab
proprietà è assegnata non è importante (ho testato).
Questa domanda è già stata trattata su StackOverflow
Attenzione: l'unità di misura per la posizione della scheda non è carattere ma qualcosa che sembra essere 1/4 di carattere. Ecco perché moltiplico la lunghezza per 4.
SOLUZIONE 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);
}
}
}