Frage

Gibt es eine Möglichkeit, die Standard-Registerkarte Größe in einer .NET-RichTextBox zu ändern? Es scheint momentan auf das Äquivalent von 8 Leerzeichen gesetzt werden, die für meinen Geschmack ein bisschen groß ist.

Edit: Um zu klären, ich den globalen Standard von „\ t“ zeigt als 4 Felder für die Steuerung festlegen möge. Von dem, was ich verstehen kann, erfordert die SelectionTabs Eigenschaft, die Sie den gesamten Text auswählen und dann über das Array die die Registerkarte Breiten. Ich werde dies tun, wenn ich muß, aber ich würde lieber nur den globalen Standard einmal ändern, wenn möglich, sot, die ich muß das nicht zu tun, dass jedes Mal.

War es hilfreich?

Lösung

Sie können es durch die SelectionTabs Eigenschaft.

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

UPDATE:
Die Sequenz Angelegenheiten ....

Wenn Sie die Registerkarten eingestellt vor dem Text des Steuer initialisiert wird, dann haben Sie den Text nicht vor der Einstellung der Registerkarten auszuwählen.

Zum Beispiel in dem obigen Code, wird dies den Text mit dem ursprünglichen 8 Räumen Tab halten stoppt:

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

Das wird aber die neuen verwenden:

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

Andere Tipps

WinForms hat keine Eigenschaft, um die Standard-Tab Größe eines RichTexBox mit einer einzigen Zahl zu setzen, aber wenn Sie bereit sind, in die Rtf des Rich-Text-Feld zu graben und modifizieren, dass, gibt es eine Einstellung, die Sie kann verwenden genannt: "\ deftab". Die Zahl gibt die Anzahl der danach twips (1 Punkt = 1/72 inch = 20 twips). Das resultierende Rtf mit der Standard-Registerkarte Größe von 720 twips aussehen könnte so etwas wie:

{\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
}

Wenn Sie müssen twips in Pixel konvertieren, diesen Code verwenden inspiriert von Pixel Konvertieren Punkte:

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

Wenn Sie eine RTF-Box, die nur verwendet wird, um anzuzeigen (nur lesen) feste Tonhöhe Text wäre die einfachste Sache nicht herum zu verwirren sein mit Tabstopps. ersetzen Sie sie einfach Sachen mit Leerzeichen.

Wenn Sie möchten, dass der Benutzer etwas eingeben kann und dass die Tab-Taste verwenden, um Sie auch die Tab-Taste erfassen könnten vorrücken, indem stattdessen OnKeyDown() und Druckräume zu überschreiben.

Es ist seltsam, dass niemand diese Methode für die ganze Zeit vorgeschlagen hat)

Wir können von der RichTextBox erben und schreiben die CmdKey Handler ( ProcessCmdKey )
Es wird wie folgt aussehen:

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);
    }
}

Nun, wenn Sie die Taste Tab , wird eine festgelegte Anzahl von Räumen in den Steuerbereich statt \t eingefügt werden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top