Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 25
1
.NET 4.x

Выделение текста цветом

01.04.2016, 09:13. Просмотров 1026. Ответов 11
Метки нет (Все метки)

Пытаюсь сделать редактор с подсветкой кода. На текущий момент подсветка сделана через rtb1.SelectionColor. Чем не нравится такой подход - т.к. текст выделяется как будто мышкой, то замена цвета у 200 элементов происходит долго и некрасиво. Хотелось бы реализовать более красивый вариант, а именно менять цвет текста без какого либо выделения текста и так, чтобы при печати новый текст так же мог менять цвет. Какие пути решения есть? Думаю в сторону написания своего контрола, но не знаю, как там нужно обрабатывать текст.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2016, 09:13
Ответы с готовыми решениями:

Выделение текста разным цветом в RichTextBox
Написал функцию, входными параметрами которой является строка, которая должна быть добавлена в...

Выделение цветом
Есть текстбокс в который выводится вычисление с трёх других текстбоксов, как сделать выделение...

Выделение цветом слов в richtextbox
Здравствуйте! Есть код: private void richTextBox1_TextChanged(object sender, EventArgs e) ...

DataGridView - выборочное выделение ячеек цветом
Помогите, пожалуйста!! Есть у меня в dataGridView есть несколько столбцов с названием "Тема" + еще...

11
8041 / 4328 / 1705
Регистрация: 11.02.2013
Сообщений: 9,212
01.04.2016, 09:26 2
Scintilla
0
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 09:27 3
Цитата Сообщение от Firik67 Посмотреть сообщение
текст выделяется как будто мышкой
Это как? Пробовал когда то давно - проблем не возникало. Может код покажите?
0
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 25
01.04.2016, 09:43  [ТС] 4
ViterAlex, забыл добавить - доступа к скачке компонентов нет и разработка идет в блокноте. Иного НЕ ДАНО
Sanya_sa, сделано примерно так
Код
myRtb.SelectionStart = s_start;
myRtb.SelectionLength = 0;
myRtb.SelectionColor = Color.Black;
0
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 09:50 5
Firik67,
Ну да так и красил.
Вот нашел кусок кода из черновика (конвертер БД пару месяцев назад делал, и для отладки подсветку вывода сделал)

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
26
27
28
29
30
31
32
33
34
35
.....
.....
.....
 finally
            {
                richTextBoxSQLreq.Visible = false;
                int my1stPosition = 0;
                int maxVal = richTextBoxSQLreq.Text.Length;
                progressBarTextKeyWords.Maximum = maxVal;
 
                foreach (var it in richTextBoxSQLreq.Text.Split(' '))
                {
                    progressBarTextKeyWords.Value++;
                    if (richTextBoxSQLreq.Find("SET") > 0)
                    {
                        my1stPosition++;
                        var t = my1stPosition;
                        my1stPosition = richTextBoxSQLreq.Find("SET", my1stPosition, 1000, RichTextBoxFinds.None);
 
                        if (my1stPosition == -1)
                        {
                            my1stPosition = t + 1;
                            continue;
                        }
 
                        richTextBoxSQLreq.SelectionStart = my1stPosition;
                        richTextBoxSQLreq.SelectionLength = "SET".Length;
                        richTextBoxSQLreq.SelectionColor = Color.Blue;
                    }
                }
 
                richTextBoxSQLreq.Visible = true;
                progressBarTextKeyWords.Value = progressBarTextKeyWords.Maximum;
                progressBarTextKeyWords.Value = 0;
            }
0
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 25
01.04.2016, 10:00  [ТС] 6
Sanya_sa, курсор по тексту скакал при выделении? У меня скачет. И от этого я хочу избавиться
0
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 10:02 7
ААААА Вы КУРСОРОМ хотите выделить)))
наверника вот это :
C#
1
2
3
myRtb.SelectionStart = s_start;
myRtb.SelectionLength = 0;
myRtb.SelectionColor = Color.Black;
не в том месте делаете)) где вы выполняете этот код?
0
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 25
01.04.2016, 10:35  [ТС] 8
Пардон, что картинкой. Функция вызывается при открытии файла с кодом.
Кликните здесь для просмотра всего текста
Выделение текста цветом
0
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 12:15 9
Ну как то так. Ничего не прыгает вроде)

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace SelectedText
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        // выделение ключевых слов в RichTextBox
        void SelectedInRTB(List<string> lw, RichTextBox r)
        {
            if (lw == null || r == null)
                return;
 
            // размер текста
            int lenText = r.Text.Length;
 
            // перебирем список слов которые хотим выделить
            foreach (var it in lw)
            {
                // преходим по всем символам текста
                for (int i = 0; i < lenText; i++)
                {
                    // запомним предидущую позицию
                    int tmpi = i;
 
                    // найдем первое вхождение it и вернем индекс его начального вхождения в текст
                    i = r.Find(it, i, lenText, RichTextBoxFinds.WholeWord);
 
                    // если вернется  -1 то значит слово it в тексте не найдено
                    if (i >= 0)
                    {
                        // красим
                        r.SelectionStart = i;
                        r.SelectionLength = it.Length;
                        r.SelectionColor = Color.Blue;
                    }
                    else
                    {
                        i = tmpi;
                    }
                }
            }
 
            // сбросим параметры раскраски
            r.SelectionStart = 0;
            r.SelectionLength = 0;
            r.SelectionColor = Color.Red;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            // список слов которые хотим выделить
            List<string> txtVal = new List<string>{ "for", "int", "float" };
 
            SelectedInRTB(txtVal, richTextBox1);
 
        }
 
    }
}
0
Миниатюры
Выделение текста цветом  
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 12:19 10
Для ленивых.
Я думаю у меня далеко не оптимальное решение)))
0
Вложения
Тип файла: 7z SelectedText.7z (30.4 Кб, 3 просмотров)
0 / 0 / 1
Регистрация: 22.10.2014
Сообщений: 25
01.04.2016, 13:11  [ТС] 11
Sanya_sa, глянь, есть у тебя такое? https://youtu.be/x5bKSm6qG28
0
Модератор
880 / 789 / 326
Регистрация: 03.02.2015
Сообщений: 5,104
Записей в блоге: 9
01.04.2016, 13:49 12
Firik67, не открываетс(((

Добавлено через 24 секунды
Я давлю на кнопку и у меня сразу все выделяет

Добавлено через 2 минуты
Открылось. Со свойствами RTB поиграйте, должно быть что то типа авто прокрутки.

Добавлено через 4 минуты
К стати у меня нет такого эфекта как у Вас)

Добавлено через 1 минуту
Авто прокрутка ScrollBar

Добавлено через 6 минут
https://www.youtube.com/watch?... load_owner
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2016, 13:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Выделение строк DataGridView цветом по условию
Здравствуйте! У меня есть DataGridView, которому в DataSource кладу DataTable, взятый из БД....

Выделение цветом отличную часть 2 строк
Всем доброго времени суток. Есть две строки. я их сравнил. нашел отличающуюся часть. записал ее в...

Выделение цветом ячеек dataGridView по значению
Всем привет!!! Подскажите пожалуйста, как первые столбца строки dataGridView перекрасить в...

Выделение цветом найденных записей в DGV
Есть таблица (список имен) и textbox, который является поиском. По начальным буквам выделяется все...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.