если вы хотите применить больше FontStyle к одному и тому же тексту, вы можете использовать побитовые операторы | и ~ | добавляет новый стиль и, например, удаляет существующий стиль

я есть расширенное текстовое поле, которое может содержать строку, содержащую элементы, выделенные жирным шрифтом, курсивом или даже разными шрифтами и размерами. Если я выберу всю строку, включая все различия, как я могу «выделить жирным шрифтом» эту строку без преобразования всей строки в общий шрифт с помощью только «жирного» атрибута?

Например: я хочу включить "Этоэто какой-то text"в"Этотэто какой-то text"

Обратите внимание, что «is some» оставалось курсивом, а «text» оставалось другим шрифтом.

То, что у меня сейчас есть, довольно упрощенно:

private void tsBold_Click(object sender, EventArgs e)
{
    if (rtb.SelectionFont == null) return;

    Font f;

    if (tsBold.Checked)
        f = new Font(rtb.SelectionFont, FontStyle.Bold);
    else
        f = new Font(rtb.SelectionFont, FontStyle.Regular);

    rtb.SelectionFont = f;

    rtb.Focus();
}

Конечно, это будет применять один и тот же шрифт ко всему выделению. Есть ли способ просто добавить "жирный" к существующему шрифту (ам)?

ОТВЕТ Хотя приведенный ниже «официальный» ответ является лишь верхушкой айсберга, мне нужен был толчок в правильном направлении. Спасибо за совет.

Вот мое официальное исправление:

Я добавил это в мой объект RichTextBox:

    /// <summary>
    ///     Change the richtextbox style for the current selection
    /// </summary>
    public void ChangeFontStyle(FontStyle style, bool add)
    {
        //This method should handle cases that occur when multiple fonts/styles are selected
        // Parameters:-
        //  style - eg FontStyle.Bold
        //  add - IF true then add else remove

        // throw error if style isn't: bold, italic, strikeout or underline
        if (style != FontStyle.Bold
            && style != FontStyle.Italic
            && style != FontStyle.Strikeout
            && style != FontStyle.Underline)
            throw new System.InvalidProgramException("Invalid style parameter to ChangeFontStyle");

        int rtb1start = this.SelectionStart;
        int len = this.SelectionLength;
        int rtbTempStart = 0;

        //if len <= 1 and there is a selection font then just handle and return
        if (len <= 1 && this.SelectionFont != null)
        {
            //add or remove style 
            if (add)
                this.SelectionFont = new Font(this.SelectionFont, this.SelectionFont.Style | style);
            else
                this.SelectionFont = new Font(this.SelectionFont, this.SelectionFont.Style & ~style);

            return;
        }

        using (EnhancedRichTextBox rtbTemp = new EnhancedRichTextBox())
        {
            // Step through the selected text one char at a time    
            rtbTemp.Rtf = this.SelectedRtf;
            for (int i = 0; i < len; ++i)
            {
                rtbTemp.Select(rtbTempStart + i, 1);

                //add or remove style 
                if (add)
                    rtbTemp.SelectionFont = new Font(rtbTemp.SelectionFont, rtbTemp.SelectionFont.Style | style);
                else
                    rtbTemp.SelectionFont = new Font(rtbTemp.SelectionFont, rtbTemp.SelectionFont.Style & ~style);
            }

            // Replace & reselect
            rtbTemp.Select(rtbTempStart, len);
            this.SelectedRtf = rtbTemp.SelectedRtf;
            this.Select(rtb1start, len);
        }
        return;
    }

Затем я изменил методы щелчка, чтобы использовать следующий шаблон:

    private void tsBold_Click(object sender, EventArgs e)
    {
        enhancedRichTextBox1.ChangeFontStyle(FontStyle.Bold, tsBold.Checked);

        enhancedRichTextBox1.Focus();
    }

Ответы на вопрос(5)

Ваш ответ на вопрос