RICHTEXTBOX COLORIR LINHA DETERMINADA

PERCIFILHO 12/08/2016 13:12:34
#465764
Boa tarde. pessoal.
Estou preenchendo uma List<> com os registros de uma tabela, depois eu jogo essa List<> numa RichTextBox.
Por exemplo:

List<Funcionario> _lista = new List<Funcionario>(new Funcionario().Get_All());

foreach (var item in _lista)
{
if (item.Tipo == [Ô]Mensalista[Ô])
{
// mostrar a linha em vermelho
}
else
{
// mostrar a linha em preto
}
rtbResultado.Text += item.Nome + [Ô]
[Ô];
}


Pois bem, ao [Ô]percorrer[Ô] a List<> para mostrar na RichTextBox, é verificado: se o Tipo do Funcionário for Mensalista, vai exibir a linha na cor vermelha, senão, vai exibir na cor preta.
Do jeito que está nesse código, estou conseguindo mostrar tudo correto, só queria conseguir alterar a cor das linhas.
Será que é possível fazer isso?
JABA 12/08/2016 14:32:26
#465767
List<Funcionario> _lista = new List<Funcionario>(new Funcionario().Get_All());

int i = 0;

foreach (var item in _lista)
{
rtbResultado.Text += item.Nome + [Ô]
[Ô];
i++;

string linha = rtbResultado.Lines[i];
rtbResultado.Select(rtbResultado.GetFirstCharIndexFromLine(i), linha .Length);

if (item.Tipo == [Ô]Mensalista[Ô])
{
rtbResultado.SelectionColor = Color.Red;
}
else
{
rtbResultado.SelectionColor = Color.Black;
}
}


OBS: Fiz de cabeça aqui, a ideia é mais ou menos por aí. Talvez o codigo i++ vai no final do loop. Qualquer coisa, senão for, faça o teste.
PERCIFILHO 15/08/2016 09:54:39
#465829
Valeu JABA era isso mesmo, apenas que o i++ tem que ficar no final do loop. Muito obrigado.
Agora, se eu tivesse uma linha, por exemplo:
Endereço: Avenida Rio Branco, 33
como faria para procurar se na linha tiver escrito [Ô]Endereço: [Ô] e colorir ou mudar a fonte apenas do que vier após os dois pontos (:) ?
JABA 15/08/2016 13:03:35
#465836
        //Método para buscar o indice da palavra procurada
public int GetIndice(string texto, string valor)
{
for (int i = 0; i < texto.Length; i++)
{
if (texto.Substring(i, valor.Length) == valor)
return i + valor.Length;
}
return 0;
}

string linha = rtbResultado.Lines[i];
rtbResultado.Select([txt-color=#e80000]GetIndice(linha, [Ô]Endereço:[Ô])[/txt-color], linha .Length);

PERCIFILHO 15/08/2016 13:09:30
#465837
Valeu, JABA, quando eu ia postar, aí que eu vi que você havia respondido. Muito obrigado mesmo.
Porém eu consegui de outra forma:

// posição inicial
int start = (rtbResultado.GetFirstCharIndexFromLine(n) + linha.LastIndexOf([Ô]:[Ô]) + 1);

// comprimento da linha
int length = linha.Substring(linha.LastIndexOf([Ô]:[Ô]), (linha.Length - (linha.LastIndexOf([Ô]:[Ô])))).Length;

// aqui faz a seleção do texto
rtbResultado.SelectionStart = start;
rtbResultado.SelectionLength = length;

// altera a cor
rtbResultado.SelectionColor = Color.OrangeRed;

Abraços amigão.
JABA 15/08/2016 13:16:28
#465838
Resposta escolhida
Se sua intenção é fazer isso somente para o [Ô]Endereço[Ô], acho melhor fazer como eu coloquei, pois se alguma outra linha tiver os dois pontos por alguma outra razão, ela ganhará outra cor também. Do modo que coloquei ele procura exatamente pela palavra desejada.

Abraços
PERCIFILHO 15/08/2016 13:49:17
#465839
Ok, então vou fazer desse jeito, muito obrigado mais uma vez.
Até mais.
Tópico encerrado , respostas não são mais permitidas