Проведя некоторые исследования, я считаю, что задаю тот же вопрос, что и Remove richtextbox SelectionBackColor. Я столкнулся с той же проблемой, но считаю, что ответы в этом потоке были недостаточными, поскольку вопрос не был четко объяснен. Пожалуйста, смотрите ниже:C# RichTextBox Удалить пользовательский SelectionBackColor
В RichTextBox
, как я удалить обычай BackColor
от некоторых, но не все, из текста (SelectionBackColor
), так что он принимает BackColor
элемента управления даже если что BackColor
изменения будущее?
У меня есть метод, который выделяет текст и изменяет его BackColor
с использованием SelectionBackColor
. У меня есть другой метод, который изменяет BackColor
всего элемента управления. Эти события могут происходить независимо.
Если я хочу «удалить» некоторые SelectionBackColor
, я могу попытаться установить SelectionBackColor
на Color.Transparent
, но в итоге он становится белым. Это нормально, временно, если мой RichTextBox
текущийBackColor
Белый. Если я установил SelectionBackColor
в текущий BackColor
, штраф временно, до тех пор, пока BackColor не изменится с другого метода.
После RichTextBox.BackColor
изменилось, все места, которые ранее были выделены белым и предыдущий BackColor
, вместо того, чтобы принять на себя новый цвет, как текст, который ранее не выделен.
Я испробовал удаление и замену текста, но это, как мне известно, отрицает возможность сохранения любого другого настраиваемого форматирования этого текста. Установка SelectionBackColor
в null не работает.
можно легко увидеть, что я имею в виду, используя код ниже:
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
this.BackColor = Color.Gray;
if (SelectionLength > 0)
{
SelectionBackColor = Color.Yellow;
}
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
this.ResetBackColor();
if (SelectionLength > 0)
{
// The goal of this line is to "remove" the yellow.
// By assigning it any value, it seems to have lost
// the ability to use the control's BackColor normally.
SelectionBackColor = this.BackColor;// or Color.Transparent
}
}
Введите текст в обычае RichTextBox
объект с кодом выше, выделить небольшую часть его, а затем сделать ящик потерять фокус. Вы увидите выделенный текст желтым цветом. Затем сделайте фокус усиления поля. Желтый фон исчезнет, как и ожидалось. Однако, если вы переместите свой карет в другом месте текста и снова потеряете фокус, вы увидите, что ранее выделенный текст не предполагает серый цвет фона.
Как о предоставлении какой-то код, чтобы работать на? –
Я не могу использовать исходный код, как на другом заблокированном рабочем компьютере. См. Упрощенный пример, приведенный выше. – Matthew
Я не думаю, что это возможно. Цвета - это значения текстовых фрагментов, а не ссылки в какое-то пространство. Поэтому вам нужно будет перебрать весь текст, чтобы изменить любые цвета. Вы можете заглянуть в код rtf, чтобы понять, что я имею в виду. (И прозрачность в любом случае не является реальным цветом, поэтому здесь это тоже не поможет.) – TaW