programing

C#을 사용하여 텍스트에 탭 문자 삽입

skycolor 2023. 4. 7. 21:04
반응형

C#을 사용하여 텍스트에 탭 문자 삽입

몇 가지 값을 캡처하고 그 값을 사용하여 텍스트를 작성해야 하는 응용 프로그램을 만들고 있습니다.Name,Age,기타.

출력은 플레인텍스트에서TextBox.

그런 정보들을 좀 더 잘 보이게 하려고요.columns그래서 저는 그것들을 로 분리하려고 합니다.tab더 명확하게 하기 위해서요.

예를 들어 다음과 같은 기능이 있습니다.

Ann 26
Sarah 29
Paul 45

다음과 같이 표시했으면 합니다.

Ann    26
Sarah  29
Paul   45

방법에 대한 힌트insert탭이 내 텍스트에 들어가나요?

를 사용해 보세요.\t당신의 문자열에 있는 캐릭터

하자르는 그의 말이 옳아\t다음은 C#의 전체 이스케이프 캐릭터 목록입니다.

\'한 번 인용하면 됩니다.

\"큰따옴표로 표시해 주세요.

\\백슬래시를 위해.

\0null 문자의 경우.

\a경보 캐릭터용입니다.

\b백스페이스를 위해서요.

\f폼피드용.

\n새로운 라인을 위해.

\r마차 반환을 위해.

\t를 선택합니다.

\v세로 탭을 선택합니다.

\uxxxx유니코드 문자 16진수 값(예:\u0020).

\x와 같다\u선행 0은 필요 없습니다(예: 0 등).\x20).

\Uxxxxxxxxunicode 문자의 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

다음 양식이 표시됩니다.

여기에 이미지 설명 입력

모든 값이 올바르게 정렬되어 있음을 알 수 있습니다. :-)

언급

MultilineTextBox 속성을 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

반응형