I'm membangun sebuah aplikasi di mana aku harus menangkap beberapa nilai-nilai dan membangun teks dengan mereka: Nama
, Usia
, dll.
Output akan menjadi plain text menjadi TextBox
.
Saya mencoba untuk membuat informasi tersebut muncul dalam semacam kolom
, oleh karena itu saya mencoba untuk memisahkan mereka dengan tab
untuk membuatnya lebih jelas.
Misalnya, alih-alih memiliki:
Ann 26
Sarah 29
Paul 45
Saya ingin menunjukkan sebagai:
Ann tab 26 Sarah tab 29 Paulus tab 45
Setiap tip tentang cara untuk insert
tab menjadi teks saya?
Hazar yang benar dengan-nya \t
. Berikut ini's daftar lengkap melarikan diri karakter untuk C#:
\'
kutip tunggal.
\"
untuk double quote.
\\
untuk backslash.
\0
untuk karakter null.
\a
untuk peringatan karakter.
\b
untuk backspace.
\f
untuk bentuk pakan.
\n
untuk baris baru.
\r
untuk carriage return.
\t
untuk horizontal tab.
\v
untuk tab vertikal.
\uxxxx
untuk karakter unicode nilai hex (misalnya \u0020
).
\x
adalah sama dengan \u
, tapi anda don't perlu awalan nol (misalnya \x20
).
\Uxxxxxxxx
untuk karakter unicode nilai hex (lagi bentuk yang diperlukan untuk menghasilkan pengganti).
Hal ini juga dapat berguna untuk menggunakan String.Format
, misalnya
String.Format("{0}\t{1}", FirstName,Count);
Menggunakan Microsoft Winform kontrol
, adalah mustahil untuk benar memecahkan masalah anda tanpa sedikit solusi yang akan saya jelaskan di bawah ini.
MASALAH
Masalah dalam menggunakan hanya " t"
atau vbTab
adalah bahwa ketika lebih dari satu TextBox yang ditampilkan dan keselarasan itu harus dihormati untuk semua TextBox, HANYA " t"
atau vbTab
solusi akan menampilkan sesuatu yang TIDAK SELALU selaras dengan benar.
Contoh di 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
akan menampilkan
seperti yang anda lihat, usia
nilai François-Victor
digeser ke kanan dan tidak selaras dengan usia
nilai dari dua orang lain TextBox.
SOLUSI
Untuk memecahkan masalah ini, anda harus mengatur posisi Tab menggunakan spesifik SendMessage()
user32.dll fungsi API seperti yang ditunjukkan di bawah ini.
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
dan berikut Form akan ditampilkan
Anda dapat melihat bahwa sekarang, semua nilai yang selaras dengan benar :-)
KETERANGAN
Multiline
property TextBox harus diatur ke True. Jika properti diatur ke False, Tab diposisikan sebagai sebelum.
Bagaimana AcceptsTab
properti yang ditugaskan tidak penting (saya telah diuji).
Pertanyaan ini sudah dirawat di StackOverflow
Hati-hati: mesure Unit untuk posisi Tab tidak karakter tapi sesuatu yang tampaknya menjadi 1/4 dari karakter. Itu sebabnya saya kalikan panjang dengan 4.
C# SOLUSI
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);
}
}
}
Selain anwsers di atas anda dapat menggunakan PadLeft atau PadRight:
string name = "John";
string surname = "Smith";
Console.WriteLine("Name:".PadRight(15)+"Surname:".PadRight(15));
Console.WriteLine( name.PadRight(15) + surname.PadRight(15));
Ini akan mengisi string dengan spasi ke kiri atau kanan.