Sami Jildeh Ответов: 1

Как сделать так, чтобы richtextbox имел нумерацию пуль для подсчета более 225


Всем привет,

Сегодня я понял, что когда у меня есть более 255 строк и я применяю нумерацию пуль, RichTextBox продолжает давать мне номер 255 после строки 254, см. рисунок, который я вставляю.

Edit: я использую WinForms
Правка 2: я помещаю часть своего кода, относящуюся к заданному упорядоченному списку, в RichTextBox

[^]Нажмите, чтобы увидеть скриншот[^]

Является ли это ограничением RichTextBox или я должен что-то сделать, чтобы исправить это?

Спасибо

Что я уже пробовал:

Я не знаю, что делать. Я не знаю, в чем может быть причина, чтобы начать исправлять это.
У меня есть нумерация пуль из функции SendMessage с помощью PARAFORMAT2

Часть моего кода:

#region PARAFORMAT2
        [StructLayout(LayoutKind.Sequential)]
        private class PARAFORMAT2
        {
            public int cbSize;
            public int dwMask;
            public short wNumbering;
            public short wReserved;
            public int dxStartIndent;
            public int dxRightIndent;
            public int dxOffset;
            public short wAlignment;
            public short cTabCount;
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)]
            public int[] rgxTabs;

            public int dySpaceBefore;     // Vertical spacing before para
            public int dySpaceAfter;     // Vertical spacing after para
            public int dyLineSpacing;     // Line spacing depending on Rule
            public short sStyle;         // Style handle
            public byte bLineSpacingRule;     // Rule for line spacing (see tom.doc)
            public byte bOutlineLevel;     // Outline Level
            public short wShadingWeight;     // Shading in hundredths of a per cent
            public short wShadingStyle;     // Byte 0: style, nib 2: cfpat, 3: cbpat
            public short wNumberingStart;     // Starting value for numbering
            public short wNumberingStyle;     // Alignment, Roman/Arabic, (), ), ., etc.
            public short wNumberingTab;     // Space bet 1st indent and 1st-line text
            public short wBorderSpace;     // Border-text spaces (nbl/bdr in pts)
            public short wBorderWidth;     // Pen widths (nbl/bdr in half twips)
            public short wBorders;         // Border styles (nibble/border)

            public PARAFORMAT2()
            {
                this.cbSize = Marshal.SizeOf(typeof(PARAFORMAT2));
            }
        }
        #endregion


public enum Paraformat2Numbering
        {
            zero = 0,
            Normal = 1,             //No paragraph numbering or bullets.
            ArabicNumbers = 2,      //Uses Arabic numbers (1, 2, 3, ...). 
            LowerCaseLetter = 3,    //Uses lowercase letters (a, b, c, ...). 
            UpperCaseLetter = 4,    //Uses uppercase letters (A, B, C, ...). 
            LowerCaseRoman = 5,     //Uses lowercase Roman numerals (i, ii, iii, ...). 
            UpperCaseRoman = 6      //Uses uppercase Roman numerals (I, II, III, ...). 
        }


public enum Paraformat2NumberingStyle
        {
            RightParenthesis = 0x000,//Follows the number with a right parenthesis.
            DoubleParenthesis = 0x100,//Encloses the number in parentheses.
            Period = 0x200,//Follows the number with a period.
            Plain = 0x300,//Displays only the number.
            zero = 0x400//Continues a numbered list without applying the next number or bullet. 
        }


public bool SelectionOrderList
        {
            get
            {
                return (
                       (GetSelectionParaformat2wNumbering() == Paraformat2Numbering.ArabicNumbers) &&
                       (GetSelectionParaformat2wNumberingStyle() == Paraformat2NumberingStyle.Period)
                       );

            }
            set
            {
                bOrder = value;

                if (value == true)
                    SetSelectionParaFormat2(Paraformat2NumberingStyle.Period, Paraformat2Numbering.ArabicNumbers);
                else
                    RemoveSelectionParaFormat2();
            }
        }


Метод SetSelectionParaFotrmat2

public void SetSelectionParaFormat2(Paraformat2NumberingStyle style, Paraformat2Numbering Number)
        {
            PARAFORMAT2 p = new PARAFORMAT2();
            p.dwMask = (int)(PFM_NUMBERING | PFM_OFFSET | PFM_NUMBERINGSTART | PFM_NUMBERINGSTYLE | PFM_NUMBERINGTAB);

            p.wNumbering = (short)Number;
            //p.dxOffset = BulletIndent;
            p.wNumberingStyle = (short)style;
            p.wNumberingStart = 1;
            p.wNumberingTab = 500;

            SendMessage(richTextBox.Handle, EM_SETPARAFORMAT, 0, p);
        }


Я поставил их на это

public bool SelectionOrderList
        {
            get
            {
                richTextBoxBulletClass r = new richTextBoxBulletClass();
                r.richTextBox = note_txt;
                return r.SelectionOrderList;
            }
            set
            {
                richTextBoxBulletClass r = new richTextBoxBulletClass();
                r.richTextBox = note_txt;
                r.SelectionOrderList = value;
            }
        }


Надеюсь, это поможет

Valery Possoz

WPF или Winform?

Karthik_Mahalingam

ОП пометил " windows"

Richard Deeming

"Windows" может означать Windows Forms, WPF или что-то еще. :)

(ОП обновила этот вопрос, чтобы прояснить его.)

Karthik_Mahalingam

о, прости, Ричард, на первый взгляд я прочитал это как "паутина"..
:)

1 Ответов

Рейтинг:
2

OriginalGriff

Стандартный RichTextBox не поддерживает нумерованные маркеры - поэтому, если вы получили код из статьи, то внизу этой статьи есть кнопка" Добавить комментарий или Вопрос", которая вызывает отправку письма автору. Затем они предупреждаются, что вы хотите поговорить с ними.
Публикуя это здесь, вы полагаетесь на то, что они "заглядывают" и понимают, что это для них.

В противном случае нам нужно было бы увидеть фактические фрагменты кода, которые вы использовали для установки пронумерованных пуль в RTF элемента управления.