Sử dụng Microsoft Winform controls
, không thể giải quyết chính xác vấn đề của bạn mà không có một cách giải quyết nhỏ mà tôi sẽ giải thích dưới đây.
VẤN ĐỀ
Vấn đề trong việc sử dụng đơn giản "\t"
hoặc vbTab
là khi có nhiều hơn một TextBox được hiển thị và sự liên kết đó phải được tôn trọng đối với tất cả TextBox, CHỈ "\t"
hoặc vbTab
giải pháp sẽ hiển thị một cái gì đó KHÔNG LUÔN được căn chỉnh chính xác.
Ví dụ trong 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
sẽ hiển thị
như bạn có thể thấy, age
giá trị cho François-Victor
được dịch chuyển sang phải và không được liên kết với age
giá trị của hai TextBox khác.
GIẢI PHÁP
Để giải quyết vấn đề này, bạn phải đặt vị trí Tab bằng cách sử dụng SendMessage()
chức năng API user32.dll cụ thể như được hiển thị bên dưới.
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
và Mẫu sau sẽ được hiển thị
Bây giờ bạn có thể thấy rằng tất cả các giá trị được căn chỉnh chính xác :-)
NHỚ
Multiline
thuộc tính của TextBox phải được đặt thành True . Nếu thuộc tính này được đặt thành Sai, Tab được định vị như trước.
Làm thế nào AcceptsTab
tài sản được chỉ định là không quan trọng (tôi đã thử nghiệm).
Câu hỏi này đã được xử lý trên StackOverflow
Thận trọng: Đơn vị mesure cho vị trí Tab không phải là ký tự mà là thứ dường như là 1/4 ký tự. Đó là lý do tại sao tôi nhân chiều dài với 4.
GIẢI PHÁP 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);
}
}
}