|
С# Средство разработки на платформе .Net |
02.02.2014, 21:11
|
#1
|
Оператор ЭВМ
Регистрация: 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
|
Оператор ЭВМ
Регистрация: 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
|
Оператор ЭВМ
Регистрация: 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
|
Оператор ЭВМ
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите разобраться с RTB
Только не говорите что это так RTB издевается и это никак не исправить. Это же бред! Я прогнал весь код в отладочном режиме: ни одного несоответствия переменных. Он правильно находит первую и последнюю точки. И все равно окрашивает до зеленой строки все в красный цвет.
__________________
P.S.: Если что я этого не говорил
|
(Offline)
|
|
04.02.2014, 07:07
|
#6
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Помогите разобраться с RTB
что это? winforms, wpf, silverlight?
|
(Offline)
|
|
04.02.2014, 18:01
|
#7
|
Оператор ЭВМ
Регистрация: 13.10.2012
Адрес: Российская Федерация,г.Челябинск.
Сообщений: 41
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите разобраться с RTB
Windows Forms разрабатываемая на Visual Studio 2012.
__________________
P.S.: Если что я этого не говорил
|
(Offline)
|
|
05.02.2014, 15:21
|
#8
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Ответ: Помогите разобраться с RTB
Сообщение от Dark Dragon
Конечно порядок кода имеет значение. SelectionStart определяет начальную область для изменения. SelectionLength - конечную точку.
|
Сообщение от Dark Dragon
SelectionLength - конечную точку.
|
Нет. SelectionLength - это количество символов начиная с SelectionStart, которые будут выбраны.
|
(Offline)
|
|
05.02.2014, 15:50
|
#9
|
Легенда
Регистрация: 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));
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
05.02.2014, 22:05
|
#10
|
Оператор ЭВМ
Регистрация: 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
|
Легенда
Регистрация: 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)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:26.
|