تعديل الافتراضي في علامة التبويب الحجم في RichTextBox

StackOverflow https://stackoverflow.com/questions/154204

سؤال

هل هناك أي طريقة لتغيير الافتراضي في علامة التبويب الحجم في .صافي RichTextBox?حاليا يبدو أن تعيين أي ما يعادل 8 المساحات التي تبدو كبيرة لبلدي الذوق.

تحرير:لتوضيح أريد أن تعيين العالمية الافتراضية " " يعرض 4 المساحات من أجل السيطرة.من ما أستطيع أن أفهم ، SelectionTabs الملكية يتطلب منك تحديد كل النص أولا ثم على علامة التبويب عرض عبر مجموعة.سوف أفعل هذا إذا كان لدي, ولكن أود أن بدلا من مجرد تغيير العالمية الافتراضية مرة واحدة ، إذا كان ذلك ممكنا ، sot أن لا يكون لديك للقيام بذلك في كل مرة.

هل كانت مفيدة؟

المحلول

يمكنك تحديد ذلك من خلال وضع SelectionTabs مكان الإقامة.

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 مع رقم واحد ، ولكن إذا كنت على استعداد لحفر في Rtf مربع نص منسق ، وتعديل أن هناك الإعداد يمكنك استخدام يسمى:"\deftab".عدد بعد ذلك إلى عدد من تويب (1 نقطة = 1/72 بوصة = 20 تويب).مما أدى Rtf مع معيار علامة التبويب حجم 720 تويب يمكن أن ننظر بشيء من مثل:

{\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 مربع تستخدم فقط لعرض (قراءة فقط) ثابت في الملعب النص ، وأسهل شيء هو أن لا تعبث مع علامات تبويب.ببساطة استبدال هذه الأشياء مع المساحات.

إذا كنت تريد أن المستخدم يمكن أن يدخل شيء و استخدام المفتاح Tab إلى وقت مبكر يمكن أيضا التقاط المفتاح Tab طريق تجاوز 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