การใช้Microsoft Winform controls
มันเป็นไปไม่ได้ที่จะแก้ปัญหาของคุณให้ถูกต้องโดยไม่มีวิธีแก้ปัญหาเล็กน้อยที่ฉันจะอธิบายด้านล่าง
ปัญหา
ปัญหาในการใช้งานอย่างง่าย ๆ"\t"
หรือvbTab
ว่าเมื่อมีการแสดงกล่องข้อความมากกว่าหนึ่งกล่องและการจัดตำแหน่งนั้นจะต้องได้รับการเคารพสำหรับกล่องข้อความทั้งหมดเท่านั้น"\t"
หรือvbTab
วิธีแก้ปัญหาจะแสดงสิ่งที่ไม่ได้จัดแนวอย่างถูกต้องเสมอ
ตัวอย่างใน 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
จะแสดง
อย่างที่คุณเห็นage
ค่าสำหรับFrançois-Victor
เลื่อนไปทางขวาและไม่สอดคล้องกับage
ค่าของสองกล่องข้อความอื่น
สารละลาย
เพื่อแก้ปัญหานี้คุณต้องตั้งตำแหน่งแท็บโดยใช้SendMessage()
ฟังก์ชั่น user32.dll API ที่เฉพาะเจาะจงดังแสดงด้านล่าง
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
และแบบฟอร์มต่อไปนี้จะปรากฏขึ้น
คุณสามารถเห็นได้ว่าตอนนี้ค่าทั้งหมดอยู่ในแนวเดียวกัน :-)
หมายเหตุ
Multiline
คุณสมบัติของกล่องข้อความจะต้องตั้งค่าที่แท้จริง หากคุณสมบัตินี้ถูกตั้งค่าเป็นเท็จแท็บจะถูกจัดตำแหน่งเหมือนเดิม
วิธีการAcceptsTab
กำหนดคุณสมบัติไม่สำคัญ (ฉันได้ทดสอบ)
คำถามนี้ได้รับการปฏิบัติกับStackOverflow แล้ว
ข้อควรระวัง: หน่วย mesure สำหรับตำแหน่งแท็บไม่ใช่อักขระ แต่เป็นสิ่งที่น่าจะเป็น 1/4 ของอักขระ นั่นคือสาเหตุที่ฉันคูณความยาวด้วย 4
C # SOLUTION
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);
}
}
}