C # RichTextBox Remover SelectionBackColor personalizado
Depois de ter feito alguma pesquisa, acredito que estou fazendo a mesma pergunta queRemover richtextbox SelectionBackColor. Eu encontrei o mesmo problema, mas acredito que as respostas nesse segmento foram insuficientes, pois a pergunta não foi explicada claramente. Por favor veja abaixo:
Em umRichTextBox
, como é que euretirar um costumeBackColor
de parte, mas não de todo, do texto (SelectionBackColor
) para que assuma oBackColor
do controlemesmo que issoBackColor
mudanças no futuro?
Eu tenho um método que destaca algum texto e altera suaBackColor
usandoSelectionBackColor
. Eu tenho outro método que altera oBackColor
de todo o controle. Esses eventos podem acontecer de forma independente.
Se eu quiser "remover" algunsSelectionBackColor
, Posso tentar definir oSelectionBackColor
paraColor.Transparent
, mas acaba sendo branco. Tudo bem, temporariamente, se meuRichTextBox
éatual BackColor
é branco. Se eu definirSelectionBackColor
para o atualBackColor
, está bom temporariamente,até que BackColor mude de outro método.
Depois deRichTextBox.BackColor
mudou, qualquer lugar destacado anteriormente usa branco ou o anteriorBackColor
, em vez de assumir a nova cor como texto que não havia destacado anteriormente.
Tentei excluir e substituir o texto, mas isso nega a capacidade de reter qualquer outra formatação personalizada desse texto, que eu saiba. ConfiguraçãoSelectionBackColor
nulo não funciona.
Pode-se ver facilmente do que estou falando usando o código abaixo:
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
}
}
Digite algum texto em um personalizadoRichTextBox
objeto com o código acima, destaque uma pequena parte dele e faça a caixa perder o foco. Você verá o texto destacado em amarelo. Então, faça a caixa ganhar foco. O fundo amarelo desaparecerá, como esperado. No entanto, se você mover o cursor em algum lugar do texto e fazer o controle perder o foco novamente, verá que o texto destacado anteriormente não assume a cor cinza de fundo.