문제

.NET RichTextBox에서 기본 탭 크기를 변경할 수있는 방법이 있습니까? 그것은 현재 내 취향에 큰 공간에 해당하는 것으로 보입니다.

편집 : 명확히하기 위해, " t"표시의 전역 기본값을 컨트롤을위한 4 개의 공간으로 설정하고 싶습니다. 내가 이해할 수있는 바에 따르면, selectionTabs 속성은 먼저 모든 텍스트를 선택한 다음 배열을 통해 탭 너비를 선택해야합니다. 내가해야한다면 이것을 할 것입니다. 그러나 가능하면 매번 그렇게 할 필요가없는 SOT를 한 번만 변경합니다.

도움이 되었습니까?

해결책

설정하여 설정할 수 있습니다 선택 탭 재산.

private void Form1_Load(object sender, EventArgs e)
{
    richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 };
}

업데이트:
시퀀스가 중요합니다 ....

컨트롤 텍스트가 초기화되기 전에 탭을 설정하면 탭을 설정하기 전에 텍스트를 선택할 필요가 없습니다.

예를 들어, 위의 코드에서 원래 8 공백 탭이있는 텍스트가 정지됩니다.

richTextBox1.Text = "\t1\t2\t3\t4";
richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 };

그러나 이것은 새로운 것들을 사용할 것입니다.

richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 };
richTextBox1.Text = "\t1\t2\t3\t4";

다른 팁

Winforms는 RichTexbox의 기본 탭 크기를 단일 숫자로 설정할 속성이 없지만 Rich Text Box의 RTF를 파헤 치고 수정할 준비가되면 다음을 사용할 수 있습니다. " deftab". 그 후 숫자는 트윈의 수를 나타냅니다 (1 포인트 = 1/72 인치 = 20 twips). 표준 탭 크기가 720 트윈의 결과 RTF는 다음과 같은 것 같습니다.

{\rtf1\ansi\ansicpg1252\deff0\deflang2057\deftab720{\fonttbl{\f0\fnil\fcharset0 Microsoft Sans Serif;}}
\viewkind4\uc1\pard\f0\fs41
1\tab 2\tab 3\tab 4\tab 5\par
}

트윈을 픽셀로 변환 해야하는 경우 영감을 얻은이 코드를 사용하십시오. 픽셀을 포인트로 변환합니다:

int tabSize=720;
Graphics g = this.CreateGraphics();
int pixels = (int)Math.Round(((double)tabSize) / 1440.0 * g.DpiX);
g.Dispose();

고정 피치 텍스트를 표시하는 데 사용되는 RTF 상자가있는 경우 가장 쉬운 것은 탭 정지를 사용하여 엉망이되지 않습니다. 단순히 물건을 공백으로 교체하십시오.

사용자가 무언가를 입력하고 해당 탭 키를 사용하여 진행할 수 있으려면 재정의하여 탭 키를 캡처 할 수도 있습니다. OnKeyDown() 대신 공간을 인쇄합니다.

아무도이 방법에 대해이 방법을 제안하지 않았다는 것은 이상합니다)

우리는에서 상속 될 수 있습니다 RichTextBox CMDKEY 핸들러를 다시 작성하십시오 (ProcessCmdkey)
다음과 같이 보일 것입니다.

public class TabRichTextBox : RichTextBox
{
    [Browsable(true), Category("Settings")]
    public int TabSize { get; set; } = 4;

    protected override bool ProcessCmdKey(ref Message Msg, Keys KeyData)
    {

        const int WM_KEYDOWN = 0x100;       // https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-keydown
        const int WM_SYSKEYDOWN = 0x104;    // https://docs.microsoft.com/en-us/windows/desktop/inputdev/wm-syskeydown
        // Tab has been pressed
        if ((Msg.Msg == WM_KEYDOWN || Msg.Msg == WM_SYSKEYDOWN) && KeyData.HasFlag(Keys.Tab))
        {
            // Let's create a string of spaces, which length == TabSize
            // And then assign it to the current position
            SelectedText += new string(' ', TabSize);

            // Tab processed
            return true;
        }
        return base.ProcessCmdKey(ref Msg, KeyData);
    }
}

이제 누가 누를 때 , 지정된 수의 공간이 대신 제어 영역에 삽입됩니다. \t

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top