En utilisant Microsoft Winform controls
, il est impossible de résoudre correctement votre problème sans une petite solution que j'expliquerai ci-dessous.
PROBLÈME
Le problème de l'utilisation simple "\t"
ou vbTab
est que lorsque plusieurs TextBox sont affichés et que l'alignement doit être respecté pour tous les TextBox, la SEULE "\t"
ou la vbTab
solution affichera quelque chose qui n'est PAS TOUJOURS correctement aligné.
Exemple dans 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
Affichera
comme vous pouvez le voir, la age
valeur de François-Victor
est décalée vers la droite et n'est pas alignée avec la age
valeur de deux autres TextBox.
SOLUTION
Pour résoudre ce problème, vous devez définir la position des onglets à l'aide d'une SendMessage()
fonction API user32.dll spécifique , comme indiqué ci-dessous.
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
et le formulaire suivant sera affiché
Vous pouvez voir que maintenant, toutes les valeurs sont correctement alignées :-)
REMARQUES
Multiline
La propriété de TextBox doit être définie sur True . Si ces propriétés sont définies sur False, l'onglet est positionné comme précédemment.
La façon dont la AcceptsTab
propriété est attribuée n'est pas importante (j'ai testé).
Cette question a déjà été traitée sur StackOverflow
Attention: l'unité de mesure pour la position Tab n'est pas un caractère mais quelque chose qui semble être 1/4 de caractère. C'est pourquoi je multiplie la longueur par 4.
SOLUTION 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);
}
}
}