Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
0 / 0 / 1
Регистрация: 08.06.2014
Сообщений: 18

Выделенный текст с разными стилями в RichTextBox

23.03.2015, 23:37. Показов 3014. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. У меня такая проблема.
Пишу лаб.работу для вуза. Мне нужно сделать текстовый редактор *.rtf с форматированием текста: жирный, курсив, подчёркивание, зачёркивание, размер, выравнивание. Форматирование текста должно быть примерно такое же, как у Word`а, т.е. с кнопками B , I,U и S. Кнопки-переключатели сделал, всё работает, но я столкнулся с проблемой, возникающей при выделении текста, имеющего несколько стилей.
При событии MouseUp программа должна проверять, выделен ли текст. Если длина выделенного текста не равна нулю, то нужно определить все активированные стили выделенного текста, например:
"Каждый охотник знает, где сидит фазан."
В этом тексте активными должны быть стили Жирный, Курсив, и подчёркивание.
Изначально я пытался сделать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
        {
                if (richTextBox1.SelectedText.Length != 0)
                    if (richTextBox1.SelectionFont.Bold == true)
                        tsBold.Checked = true;
                    else tsBold.Checked = false;
 
                    if (richTextBox1.SelectionFont.Italic == true)
                        tsItalic.Checked = true;
                    else tsItalic.Checked = false;
 
                    if (richTextBox1.SelectionFont.Underline == true)
                        tsU.Checked = true;
                    else tsU.Checked = false;
 
                    if (richTextBox1.SelectionFont.Strikeout == true)
                        tsS.Checked = true; 
                    else tsS.Checked = false;
        }
Но моя программа не видит ни одного стиля. В хелпе пишут, что если выделено два или более разных шрифтов, то SelectionFont равен null.
Подскажите, как можно решить эту проблему?

Добавлено через 6 минут
т.е. не шрифтов, а стилей
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.03.2015, 23:37
Ответы с готовыми решениями:

Удалить выделенный текст в richTextBox
Подскажите пожалуйста, как удалить выделенный текст в richtextbox?

Получить выделенный текст в RichTextBox
Всем доброго времени суток! На форме находиться ритексбокс с текстом. Вопрос: Если выделить курсором слово из текста, то как...

Одновременно подчеркнутый и выделенный текст в richtextbox
Добрый всем вечер! Подскажите, как можно сделать текст одновременно подчеркнутым и выделенным в richtextbox???? Добавлено через 2 часа...

8
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
23.03.2015, 23:39
Проверил в Word: он так не умеет. Если выделен текст с разным оформлением, то свойства Bold, Italic и т.п. у шрифта равны 9999999. Так что я бы не заморачивался
1
0 / 0 / 1
Регистрация: 08.06.2014
Сообщений: 18
23.03.2015, 23:51  [ТС]
Точно, моя ошибка была в том, что я не посмотрел, как умеет Word, и пытался изобрести велосипед. Спасибо
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
24.03.2015, 00:12
the_TOP,
Попробуйте такой вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        private void richTextBox1_MouseUp(object sender, MouseEventArgs e)
        {
            string[] styles = { "\\b\\", "\\i\\", "\\ul\\" };
            
            string textRtf = richTextBox1.SelectedRtf;
 
            foreach (string style in styles)
            {
                if (textRtf.IndexOf(style)>0)
                switch (style)
                {
                    case "\\b\\":
                        MessageBox.Show("B");
                        break;
 
                    case "\\i\\":
                        MessageBox.Show("I");
                        break;
 
                    case "\\ul\\":
                        MessageBox.Show("ul");
                        break;
                }
            }                           
        }
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
24.03.2015, 00:32
Тут дело в логическом противоречии. Если эти стили применены к тексту, то ты соответствующие кнопки должны быть нажаты, так? А если в выделении есть текст, к которому никакие стили не применены, тогда кнопки должны быть отжаты. Как быть?
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
24.03.2015, 01:06
Цитата Сообщение от ViterAlex Посмотреть сообщение
А если в выделении есть текст, к которому никакие стили не применены, тогда кнопки должны быть отжаты. Как быть?
C#
1
2
3
4
5
6
7
8
        checkBox1.Checked =  checkBox2.Checked = checkBox3.Checked=false;
           try
            {
                if (richTextBox1.SelectionFont.Bold) checkBox1.Checked = true;
                if (richTextBox1.SelectionFont.Italic) checkBox2.Checked = true;
                if (richTextBox1.SelectionFont.Underline) checkBox3.Checked = true;
            }
            catch { }
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
24.03.2015, 01:17
Евгений В, всё это понятно и можно записать гораздо короче. Тут дело в другом. В примере , который привёл the_TOP, есть обычный текст. Значит, все кнопки должны быть отжаты. Но есть и форматированный, значит, соответствующие кнопки должны быть нажаты. И поскольку тут неопределённость, то все кнопки должны быть отжаты, как это и сделано в Word
0
 Аватар для Евгений В
912 / 672 / 134
Регистрация: 01.03.2010
Сообщений: 1,279
24.03.2015, 01:35
Цитата Сообщение от ViterAlex Посмотреть сообщение
то все кнопки должны быть отжаты, как это и сделано в Word
Так и будет

Добавлено через 1 минуту
Цитата Сообщение от ViterAlex Посмотреть сообщение
можно записать гораздо короче
Можно
C#
1
2
3
4
5
6
7
            try
            {
                 checkBox1.Checked = richTextBox1.SelectionFont.Bold;
                 checkBox2.Checked = richTextBox1.SelectionFont.Italic;
                 checkBox3.Checked = richTextBox1.SelectionFont.Underline;
            }
            catch { }
Но, видимо тут нужны не чекбоксы а кнопки. Поэтому писал более развернуто
0
 Аватар для ViterAlex
8952 / 4864 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
24.03.2015, 02:13
Цитата Сообщение от Евгений В Посмотреть сообщение
Но, видимо тут нужны не чекбоксы а кнопки.
Нет, тут как раз нужны чекбоксы с Appearance = Button
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.03.2015, 02:13
Помогаю со студенческими работами здесь

Присвоить переменной выделенный текст в RichTextBox
Здравствуйте, у меня есть вопросик по реализации некоторой вещи на c#. Я не опытный в программировании, поэтому объясню как смогу = ) ...

Добавить выделенный цветом текст в начало RichTextBox
public static class RichTextBoxExtensions { public static void AppendText(this RichTextBox box, string text, Color color) { ...

Построить 5 треугольников с разными высотами и с разными стилями заполнения
Построить 5 треугольников с разными высотами и с разными стилями заполнения.

Заштриховать область разными стилями
Program ss; uses crt,graphABC; Const W=1025; Const H=768; Const a=-10; Const b= 10; var x0,y0:integer; //константы и...

Нарисовать не менее 8 линий разными стилями
Здраствуйте! Очень надеюсь на вашу помощь. Нужно нарисовать не менее 8 линий разными стилями. Сохранить направление линий, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru