Texto selecionado corretamente de acordo com o intervalo definido.
Há um deslocamento de 5 caracteres à direita.
rtfcontrol.Appen(initialtext, true);
rtfcontrol.Append(sometext, true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length - sometext.Length, rtfcontrol.Text.Length -1);
rtfcontrol.SelectionForeground = Colors.Blue;
rtfcontrol.Append("\n", true);
rtfcontrol.Selection = new Range<int>(rtfcontrol.Text.Length);
WPF:
GTK2 (Linux):
Xamarin.Mac:
No Windows, os caracteres de final de linha de alguma forma não são contados para os índices de seleções. Atualmente, uso o seguinte código como solução alternativa:
private void Write(string message, Color c)
{
Append(message + Environment.NewLine, true);
int idx = -1, last = -1;
if (Environment.OSVersion.Platform == PlatformID.Unix)
{
idx = Text.LastIndexOf(message);
last = Text.Length;
}
else
{
var lines = string.Join("", Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries));
idx = lines.LastIndexOf(message);
last = lines.Length;
}
if (idx == -1)
return;
Selection = new Range<int>(idx, idx + message.Length);
SelectionForeground = c;
Selection = new Range<int>(last, last);
}
Mas isso é definitivamente um bug ...
Sim, eu usei o mesmo hack do @ManuelHu antes, não é bonito. Ainda não tenho certeza de como lidar com isso de forma eficaz sem ser lento demais com textos grandes.
Obrigado por relatar o problema!
Olá @DanWBR ,
Isso deve ser corrigido no último ramo de desenvolvimento. Você poderia tentar? Em todas as plataformas, as novas linhas agora são tratadas como um único caractere \n
.
Olá @cwensley , ainda falta um caractere para consertar:
Ei @DanWBR , você tem uma reprodução para o off por um problema? Não consigo reproduzi-lo.
Talvez eu esteja usando índices errados? Ele funciona no macOS e GTK, no entanto.
@DanWBR , ah sim, isso não funcionará da maneira que você fez, infelizmente - WPF adiciona uma nova linha no final da propriedade Text
(independentemente se o seu texto tem ou não). Não encontrei uma maneira de contornar isso neste momento, mas é uma questão separada desta.
O que eu recomendo é manter a posição atual em uma variável e incrementá-la após acrescentar o texto. Acessar a propriedade Text
cada vez apenas para obter o comprimento diminuirá à medida que o texto fica maior.
Comentários muito úteis
@DanWBR , ah sim, isso não funcionará da maneira que você fez, infelizmente - WPF adiciona uma nova linha no final da propriedade
Text
(independentemente se o seu texto tem ou não). Não encontrei uma maneira de contornar isso neste momento, mas é uma questão separada desta.O que eu recomendo é manter a posição atual em uma variável e incrementá-la após acrescentar o texto. Acessar a propriedade
Text
cada vez apenas para obter o comprimento diminuirá à medida que o texto fica maior.