hyperlinks quebrados em arquivo RTF no RichTextBox
-
22-07-2019 - |
Pergunta
Eu estou usando um RichTextBox
para exibir um arquivo RTF, que inclui um único hiperlink. O texto da ligação não é um URL (o alvo é uma URL válida). O RTF foi criado com o Word. Word e WordPad reconhecer corretamente as ligações (O WordPad não iniciar as ligações, mas mostra o cursor mão apropriado).
Quando eu carregar o RTF em um RichTextBox
os links aparecem formatado corretamente (azul e sublinhado), mas ao invés de se comportar como um link, quando o cursor se move sobre o link continua a ser uma viga, o evento LinkClicked
não irá fogo , e ele realmente mostra o alvo entre colchetes após o link (isso não parece correto). Uma vez que o texto da ligação não é um URL, DetectUrls
não ajuda aqui.
Existe uma razão que RichTextBox
não lidar correctamente com estas ligações, ou uma maneira de fazê-los funcionar como esperado?
Aqui está o código.
TipView.Rtf = tips[tipIndex];
// I've also tried TipView.LoadFile, with identical result
Para reproduzir o problema, crie um documento RTF com Word (estou usando 2000) contendo um link de cujo texto não é um URL mas alvos uma URL válida, e programaticamente carregar o arquivo .rtf em um RichTextBox
(eu sou usando .NET 2.0 em C # Express 2008).
Solução
Para hyperlinks de apoio, você precisa RICHEDIT50W
versão de "rich editar" .
Para que:
- De qualquer uso .NET Framework 4.7, que usa
RICHEDIT50W
nativamente noRichTextBox
. -
Em versões anteriores do .NET Framework, você pode modificar
RichTextBox
ao usoRICHEDIT50W
:public class ExRichText : RichTextBox { [DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", CharSet = CharSet.Unicode, SetLastError = true)] private static extern IntPtr LoadLibraryW(string s_File); protected override CreateParams CreateParams { get { var cp = base.CreateParams; LoadLibraryW("MsftEdit.dll"); cp.ClassName = "RichEdit50W"; return cp; } } }
Com base RichTextBox Seleção Destaque e RichTextBox não pode exibir Unicode matemáticos símbolos alfanuméricos .