C#을 사용하여 텍스트에 탭 문자 삽입
몇 가지 값을 캡처하고 그 값을 사용하여 텍스트를 작성해야 하는 응용 프로그램을 만들고 있습니다.Name
,Age
,기타.
출력은 플레인텍스트에서TextBox
.
그런 정보들을 좀 더 잘 보이게 하려고요.columns
그래서 저는 그것들을 로 분리하려고 합니다.tab
더 명확하게 하기 위해서요.
예를 들어 다음과 같은 기능이 있습니다.
Ann 26
Sarah 29
Paul 45
다음과 같이 표시했으면 합니다.
Ann 26
Sarah 29
Paul 45
방법에 대한 힌트insert
탭이 내 텍스트에 들어가나요?
를 사용해 보세요.\t
당신의 문자열에 있는 캐릭터
하자르는 그의 말이 옳아\t
다음은 C#의 전체 이스케이프 캐릭터 목록입니다.
\'
한 번 인용하면 됩니다.
\"
큰따옴표로 표시해 주세요.
\\
백슬래시를 위해.
\0
null 문자의 경우.
\a
경보 캐릭터용입니다.
\b
백스페이스를 위해서요.
\f
폼피드용.
\n
새로운 라인을 위해.
\r
마차 반환을 위해.
\t
를 선택합니다.
\v
세로 탭을 선택합니다.
\uxxxx
유니코드 문자 16진수 값(예:\u0020
).
\x
와 같다\u
선행 0은 필요 없습니다(예: 0 등).\x20
).
\Uxxxxxxxx
unicode 문자의 16진수 값(대신 문자를 생성하기 위해 필요한 형식)에 대해 지정합니다.
사용법도 편리합니다.String.Format
,예.
String.Format("{0}\t{1}", FirstName,Count);
사용.Microsoft Winform controls
아래에서 설명하는 약간의 회피책 없이는 당신의 문제를 올바르게 해결하는 것은 불가능합니다.
문제
간단한 사용의 문제"\t"
또는vbTab
둘 이상의 TextBox가 표시되고 모든 TextBox에 대해 정렬이 유지되어야 하는 경우,"\t"
또는vbTab
솔루션에서는 항상 올바르게 정렬되어 있지 않은 것이 표시됩니다.
VB의 예넷:
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
두 개의 다른 TextBox 값.
솔루션
이 문제를 해결하려면 특정 항목을 사용하여 탭 위치를 설정해야 합니다.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
TextBox 속성을 True로 설정해야 합니다.이 속성을 False로 설정하면 탭은 이전과 같이 배치됩니다.
어떻게.AcceptsTab
속성은 중요하지 않습니다(테스트했습니다).
이 질문은 StackOverflow에서 이미 처리되었습니다.
주의: Mesure Unit for Tab 위치는 문자가 아니라 1/4 문자로 보이는 위치입니다.그래서 길이 4를 곱한 거예요.
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);
}
}
}
var text = "Ann@26"
var editedText = text.Replace("@", "\t");
을 사용하다 것은 '우리'를 사용하는 입니다.\t
를 참조해 주세요.이렇게 하다, 하다, 하다, 하다, 될 수도 있어요.\t
때도 요, 안 될 때도 있어요.PdfReport
누겟
리터럴 문자열(@로 시작)을 사용하는 경우 이 작업이 더 쉬울 수 있습니다.
char tab = '\u0009';
string A = "Apple";
string B = "Bob";
string myStr = String.Format(@"{0}:{1}{2}", A, tab, B);
Apple:<tab>Bob
string St = String.Format("{0,-20} {1,5:N1}\r", names[ctr], hours[ctr]);
richTextBox1.Text += St;
이 방법은 잘 작동하지만 단일 공백 글꼴이 있어야 합니다.
위의 Anwser 외에도 PadLeft 또는 PadRight를 사용할 수 있습니다.
string name = "John";
string surname = "Smith";
Console.WriteLine("Name:".PadRight(15)+"Surname:".PadRight(15));
Console.WriteLine( name.PadRight(15) + surname.PadRight(15));
그러면 문자열이 왼쪽 또는 오른쪽에 공백으로 채워집니다.
언급URL : https://stackoverflow.com/questions/366124/inserting-a-tab-character-into-text-using-c-sharp
'programing' 카테고리의 다른 글
SQL Server에서의 LIKE vs Contains (0) | 2023.04.07 |
---|---|
SQL varchar에서 특정 하위 문자열의 발생 횟수를 어떻게 계산합니까? (0) | 2023.04.07 |
SQL 서버에서 행을 열로 효율적으로 변환 (0) | 2023.04.07 |
시간을 고려하지 않고 날짜 시간 열별로 그룹화하는 방법 (0) | 2023.04.07 |
포스트그레가 뭐죠?ISNULL()에 상당하는 SQL (0) | 2023.04.07 |