修改RichTextBox中的默认选项卡大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了修改RichTextBox中的默认选项卡大小相关的知识,希望对你有一定的参考价值。

有没有办法更改.NET RichTextBox中的默认选项卡大小?它目前似乎设置为相当于8个空间,这对我来说有点大。

编辑:为了澄清,我想将全局默认值“ t”显示为控件的4个空格。根据我的理解,SelectionTabs属性要求您先选择所有文本,然后通过数组选择选项卡宽度。如果必须,我会这样做,但我宁愿只更改一次全局默认值,如果可能的话,我不必每次都这样做。

答案

您可以通过设置SelectionTabs属性来设置它。

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

更新: 顺序很重要....

如果在初始化控件文本之前设置选项卡,则不必在设置选项卡之前选择文本。

例如,在上面的代码中,这将使文本保留原始的8个空格制表位:

richTextBox1.Text = "	1	2	3	4";
richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 };

但这将使用新的:

richTextBox1.SelectionTabs = new int[] { 100, 200, 300, 400 };
richTextBox1.Text = "	1	2	3	4";
另一答案

Winforms没有用于设置具有单个数字的RichTexBox的默认选项卡大小的属性,但是如果您准备深入研究富文本框的Rtf并修改它,则可以使用一个名为的设置: “ deftab”。之后的数字表示缇数(1点= 1/72英寸= 20缇)。标准选项卡大小为720缇的结果Rtf可能如下所示:

{
tf1ansiansicpg1252deff0deflang2057deftab720{fonttbl{f0fnilfcharset0 Microsoft Sans Serif;}}
viewkind4uc1pardf0fs41
1	ab 2	ab 3	ab 4	ab 5par
}

如果您需要将缇转换为像素,请使用受Convert Pixels to Points启发的代码:

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

如果你有一个仅用于显示(只读)固定音高文本的RTF框,最简单的方法就是不要乱用Tab停止。只需用空格替换它们。

如果您希望用户可以输入内容并使用该Tab键前进,您还可以通过覆盖OnKeyDown()和打印空格来捕获Tab键。

另一答案

奇怪的是,没有人一直提出这种方法)

我们可以继承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);
    }
}

现在,当您按Tab键时,将在控件区域中插入指定数量的空格而不是

以上是关于修改RichTextBox中的默认选项卡大小的主要内容,如果未能解决你的问题,请参考以下文章

引导选项卡中的数据表大小不正确

修改lvgl tabview部件顶部框(选项卡)的默认样式

修改lvgl tabview部件顶部框(选项卡)的默认样式

在android中更改选项卡中的文本大小

QGraphicsView 的大小与预期不同

如何让easyui中的tabs初始化时默认不是选中第一个选项卡而是选中我指定的选项卡??