Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 02.02.2014, 21:11   #1
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Вопрос Помогите разобраться с RTB

Пишу приложение в котором необходимо в RichTextBox выводить текст в разном форматировании. На первой строке к примеру красные буквы привязанные к левому краю, а на второй зеленые буквы привязанные к правому краю. И затем так далее. Я написал такой код:
       int Th()
             {
               string say = "bla bla bla";                
                Dialogbox.Text += say + Environment.NewLine;
                int my1stPosition = Dialogbox.Text.Length - say.Length-1;
                Dialogbox.SelectionStart = my1stPosition;
                Dialogbox.SelectionLength = say.Length;
                Dialogbox.SelectionColor = Color.Green;
                Dialogbox.SelectionAlignment = HorizontalAlignment.Right;
            }

        private void button1_Click(object sender, EventArgs e)
        {
            string say = message.Text;
            if (say != "")
            {
                Dialogbox.Text += say + Environment.NewLine;
                int my1stPosition = Dialogbox.Text.Length - say.Length - 1;
                Dialogbox.SelectionStart = my1stPosition;
                Dialogbox.SelectionLength = say.Length;
                Dialogbox.SelectionColor = Color.Red;
                Dialogbox.SelectionAlignment = HorizontalAlignment.Left;
                message.Text = "";
                Th();
            }
Кнопка берет данные с текстбокса и запихивает его в RTB попутно обрабатывая. Затем вызывается функция ответа, которая пишет строчку и обрабатывает уже ее. Вопрос: почему в результате после второго, третьего и т.д. ввода данных предыдущий текст становится красным и привязанным к левому краю?
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 02.02.2014, 23:20   #2
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите разобраться с RTB

Даже если я делаю так:
private void button1_Click(object sender, EventArgs e)
         {  int i = 0;
         for (; i < 10; i++)
         {
             string say = "dasas";
             Dialogbox.Text += say + Environment.NewLine;
             int my1stPosition = Dialogbox.Text.Length - say.Length -1;
             Dialogbox.SelectionStart = my1stPosition;
             Dialogbox.SelectionLength = say.Length;
             Dialogbox.SelectionColor = Color.Red;
             Th();
             say = "bla bla bla";
             Dialogbox.Text += say + Environment.NewLine;
             int my2ndPosition = Dialogbox.Text.Length - say.Length - 1;
             Dialogbox.SelectionStart = my2ndPosition;
             Dialogbox.SelectionLength = say.Length;
             Dialogbox.SelectionColor = Color.Green;
             Dialogbox.SelectionAlignment = HorizontalAlignment.Right;
         }
Ничего не меняется.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 03.02.2014, 07:02   #3
Жека
Дэвелопер
 
Регистрация: 04.09.2005
Адрес: Красноярск
Сообщений: 1,376
Написано 491 полезных сообщений
(для 886 пользователей)
Ответ: Помогите разобраться с RTB

Может порядок команд значение имеет? Сначала поставить SelectionAlignment а потом SelectionStart, SelectionLength.
(Offline)
 
Ответить с цитированием
Старый 03.02.2014, 19:27   #4
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите разобраться с RTB

Конечно порядок кода имеет значение. SelectionStart определяет начальную область для изменения. SelectionLength - конечную точку. Их обязательно ставить перед тем как изменять выбранный сегмент.
__________________
P.S.: Если что я этого не говорил

Последний раз редактировалось Dark Dragon, 04.02.2014 в 19:18.
(Offline)
 
Ответить с цитированием
Старый 03.02.2014, 20:04   #5
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите разобраться с RTB

Только не говорите что это так RTB издевается и это никак не исправить. Это же бред! Я прогнал весь код в отладочном режиме: ни одного несоответствия переменных. Он правильно находит первую и последнюю точки. И все равно окрашивает до зеленой строки все в красный цвет.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 04.02.2014, 07:07   #6
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Помогите разобраться с RTB

что это? winforms, wpf, silverlight?
(Offline)
 
Ответить с цитированием
Старый 04.02.2014, 18:01   #7
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите разобраться с RTB

Windows Forms разрабатываемая на Visual Studio 2012.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 05.02.2014, 15:21   #8
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Помогите разобраться с RTB

Сообщение от Dark Dragon Посмотреть сообщение
Конечно порядок кода имеет значение. SelectionStart определяет начальную область для изменения. SelectionLength - конечную точку.
Сообщение от Dark Dragon Посмотреть сообщение
SelectionLength - конечную точку.
Нет. SelectionLength - это количество символов начиная с SelectionStart, которые будут выбраны.
(Offline)
 
Ответить с цитированием
Старый 05.02.2014, 15:50   #9
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Помогите разобраться с RTB

Написал свой пример, как раз для VS2012. Смотри аттач.

Твоя ошибка была в том, что текст ты в RTB добавлял так: Dialogbox.Text += say + Environment.NewLine;
Надо было через AppendText.

var additionalText = "Новый абзац\n";

var start = MyTextBox.Text.Length;
var length = additionalText.Length;

MyTextBox.AppendText(additionalText);

MyTextBox.Select(start, length);
MyTextBox.SelectionColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
Вложения
Тип файла: zip RTB.zip (10.2 Кб, 649 просмотров)
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Dark Dragon (05.02.2014)
Старый 05.02.2014, 22:05   #10
Dark Dragon
Оператор ЭВМ
 
Аватар для Dark Dragon
 
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Помогите разобраться с RTB

Сообщение от johnk Посмотреть сообщение
Написал свой пример, как раз для VS2012. Смотри аттач.

Твоя ошибка была в том, что текст ты в RTB добавлял так: Dialogbox.Text += say + Environment.NewLine;
Надо было через AppendText.

var additionalText = "Новый абзац\n";

var start = MyTextBox.Text.Length;
var length = additionalText.Length;

MyTextBox.AppendText(additionalText);

MyTextBox.Select(start, length);
MyTextBox.SelectionColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
Спасибо за помощь.
Однако все равно не понимаю почему оператор "+=" создает такие ошибки.
__________________
P.S.: Если что я этого не говорил
(Offline)
 
Ответить с цитированием
Старый 06.02.2014, 07:46   #11
johnk
Легенда
 
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений
(для 568 пользователей)
Ответ: Помогите разобраться с RTB

Сообщение от Dark Dragon Посмотреть сообщение
Спасибо за помощь.
Однако все равно не понимаю почему оператор "+=" создает такие ошибки.
Не знаю. Хочешь, пошарься в сорсах. Вот AppendText, к примеру:
if (text.Length <= 0)
   return;
int start;
int length;
this.GetSelectionStartAndLength(out start, out length);
try
{
   int endPosition = this.GetEndPosition();
   this.SelectInternal(endPosition, endPosition, endPosition);
   this.SelectedText = text;
}
finally
{
   if (this.Width == 0 || this.Height == 0)
      this.Select(start, length);
}
По-моему вполне удовлетворительно, что оно и так работает
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 01:40.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com