Оптимизация установки цвета текста в RichTextBox

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

dimaboyko
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.04.2007 (Вт) 14:00

Оптимизация установки цвета текста в RichTextBox

Сообщение dimaboyko » 05.04.2007 (Чт) 11:55

Привет всем!

При изменении текста в RichTextBox я использую следующую процедуру, которая красит мне символы, так как мне надо:

Код: Выделить всё
Public Sub ColorRtfText(ByVal rtf As RichTextBox)
        Dim d, w As Integer
        Dim ss As String
        rtf.SelectionStart = 0
        rtf.SelectionLength = rtf.Text.Length
        rtf.SelectionColor = Color.Black
        For d = 0 To rtf.Text.Length - 1
            w = d
            ss = rtf.Text.Substring(d, 1)
            rtf.SelectionStart = w
            rtf.SelectionLength = ss.Length
            Select Case ss
                Case "П"
                    rtf.SelectionColor = Color.Red
                Case "И"
                    rtf.SelectionColor = Color.Green
                Case "П"
                    rtf.SelectionColor = Color.Blue
                Case "Е"
                    rtf.SelectionColor = Color.Blue
                Case "Ц"
                    rtf.SelectionColor = Color.Black
            End Select
        Next
    End Sub


Однако, на больших строчках более 100 символов визуально все это просто Г...НО. :(
И очень медленно работает... сами понимаете... :wink:

Вопрос: Как этот код оптимизировать, чтобы визуально не было замечено как идет замена цвета?

Спасибо!

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 05.04.2007 (Чт) 12:26

А нафига процедура с перебором?
Наверно, можно просто по изменению текста отслеживать последний символ и красить... Вот набил, почти получилось - возиться некогда (красит следующий за нужным) :(
Но по-моему, так быстрее будет (если получится) и незаметнее. :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

dimaboyko
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.04.2007 (Вт) 14:00

А код где? :)

Сообщение dimaboyko » 05.04.2007 (Чт) 12:36

Забыл кинуть код? :)

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 05.04.2007 (Чт) 12:47

Делай RTB невидимым и пользуйся методом Find для поиска нужного текста. Где-то была тема аналогичного содержания, стоит поискать
Весь мир матрица, а мы в нем потоки байтов!

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Сообщение Alex[fj] » 05.04.2007 (Чт) 20:08

dimaboyko, вот код:
Код: Выделить всё
Dim s As String
    Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
        Try
            s = Mid(RichTextBox1.Text, RichTextBox1.Text.Length, 1)
        Catch ex As Exception

        End Try
        Select Case s
            Case "r"
                Try
                    RichTextBox1.SelectionStart = RichTextBox1.Text.Length - 1
                    RichTextBox1.SelectionLength = 2
                    RichTextBox1.SelectionColor = Color.Red
                    RichTextBox1.SelectionStart = RichTextBox1.Text.Length
                    RichTextBox1.SelectionColor = Color.Black
                Catch ex As Exception

                End Try
        End Select
    End Sub
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой

dimaboyko
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 03.04.2007 (Вт) 14:00

Ну да это все хорошо, но только...

Сообщение dimaboyko » 06.04.2007 (Пт) 13:36

А вот когда из CLIPBOARD текст вставляешь, он должен быть раскрашен и тут этот код не вкатывает.
Также он не вкатывает когда надо править предшествующую букву.

:roll:

Alex[fj]
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 278
Зарегистрирован: 17.02.2007 (Сб) 20:10
Откуда: Питер

Ну сам-то повозись...

Сообщение Alex[fj] » 06.04.2007 (Пт) 16:45

dimaboyko,
...он не вкатывает когда надо править предшествующую букву.

Ну, это можно и поправить. Обрати внимание:
[старый код]
Код: Выделить всё
...
RichTextBox1.SelectionStart = RichTextBox1.Text.Length - 1
...

Поэтому и не вкатывает. SelectionStart нужно сбрасывать на единицу назад от края, а просто на единицу назад... Не учел... Но поправить можно! :)
А вот когда из CLIPBOARD текст вставляешь, он должен быть раскрашен и тут этот код не вкатывает.

Ну, это уже отдельная песня... Надо отслеживать втавку. Но тоже все ряльно! :)
Изображение
Стараюсь быть вполне хорошим (c) Лев Толстой


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList