C# Windows -Formulare und URL in Linknamen eingebettet?
Posted: 16 Mar 2025, 16:49
Ich habe die letzten Stunden damit verbracht, etwas zu tun, von dem ich dachte, dass es in meiner C# Windows -Formularanwendung wäre - eine RichTextBox mit eingebetteten Links zu haben. Dies scheint jedoch weitaus komplizierter als erwartet zu sein, und ich würde einige Hinweise dazu schätzen. src = "https://i.static.net/uatgwhed.png"/>
Eine Liste von Web -Links oder lokalen Dateien auf dem System, und dann kann ich natürlich darauf klicken und es wird geöffnet. Es ist auch ein gewisses Styling erforderlich, wie Schriftgewicht und Kugeln usw.
Was ich bisher habe, ist ein RichTextBox mit dem Namen RichTextBoxessources .
Obwohl es wie ein Link im RichTextBox aussieht, reagiert es beim Klicken nicht.
Wie Sie im Text sehen können, habe ich hier gerade einen Pausenpunkt platziert, aber es reicht hier nie ein, was mein Problem ist. /> Ich nehme an, ich muss es mit RTF-Code machen, da ich auch einige Kugeln und Schriftgewichte machen muss, aber im Moment konzentriere ich mich auf die eingebetteten Links. Hyperlinks, die im reichen Textfeld mit RTF arbeiten, ist jedoch nur ein "Versuch, ob dies funktioniert" und keine Erklärung für RTF. /> [*] Die RTF -Datei in text -editor laden und den rtf cod < /li>
RTF -Code in RichTextBox einfügen < /code> < /li>
< /ol>
Dies macht den Web -Link tatsächlich anklickbar - aber nur den ersten Link!? Alle anderen Links sehen nach normalen Links aus, aber es passiert nichts, wenn ich auf sie klicke - nur der erste Link funktioniert. < /P>
Dies ist mein Testcode dafür: < /p>
Jemand im Kommentar hat vorgeschlagen, " HTML mit einer Webbrowser -Steuerung wie WebView2 " zu untersuchen - diese Methode, die ich nicht kenne, aber ich werde mit Sicherheit darauf einschauen, aber ich befürchte dann auf die lokalen Links. Microsoft.Web.WebView2 Nuget -Paket, und dies kann für Web -Links gut funktionieren. Wie vermutet, funktioniert lokale Dateilinks nicht - es löst nicht die Klick -Ereignis für Dateien aus.
Dies ist mein Code:
Die Debug.WriteLine wird am Web -Link ausgelöst, jedoch nicht für den Dateilink. Anstelle von RTF und RichTextBox und mit webView2 , einem Microsoft -Nuget -Paket, das interne generierte HTML -Seiten unterstützt.>
Eine Liste von Web -Links oder lokalen Dateien auf dem System, und dann kann ich natürlich darauf klicken und es wird geöffnet. Es ist auch ein gewisses Styling erforderlich, wie Schriftgewicht und Kugeln usw.
Was ich bisher habe, ist ein RichTextBox mit dem Namen RichTextBoxessources .
Code: Select all
string link2 = "https://whatever.dk";
string name2 = "My Link";
StringBuilder rtf = new StringBuilder();
rtf.Append(@"{\rtf1\ansi");
rtf.Append(@"{\fonttbl\f0\fnil\fcharset0 Calibri;}");
rtf.Append(@"{\colortbl ;\red0\green0\blue255;}");
rtf.Append(@"\viewkind4\uc1\pard\f0\fs20 ");
rtf.Append($@"{{\field{{\*\fldinst HYPERLINK ""{link2}""}}{{\fldrslt{{\ul\cf1 {name2}}}}}}}");
rtf.Append(@"\par}");
richTextBoxRessources.Rtf = rtf.ToString();
Code: Select all
richTextBoxRessources.LinkClicked += richTextBoxRessources_LinkClicked;
< /code>
Und dann sein Code: < /p>
private void richTextBoxRessources_LinkClicked(object sender, LinkClickedEventArgs e)
{
Debug.WriteLine("Break-point set here");
}
RTF -Code in RichTextBox einfügen < /code> < /li>
< /ol>
Dies macht den Web -Link tatsächlich anklickbar - aber nur den ersten Link!? Alle anderen Links sehen nach normalen Links aus, aber es passiert nichts, wenn ich auf sie klicke - nur der erste Link funktioniert. < /P>
Dies ist mein Testcode dafür: < /p>
Code: Select all
StringBuilder rtf = new StringBuilder();
rtf.Append("{\\rtf1\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang1033{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Calibri; } {\\f1\\fnil\\fcharset0 Calibri; } {\\f2\\fnil\\fcharset2 Symbol; } }");
rtf.Append("{\\colortbl;\\red0\\green0\\blue255;\\red5\\green99\\blue193; }");
rtf.Append("{\\*\\generator Riched20 10.0.19041}\\viewkind4\\uc1");
rtf.Append("\\pard\\widctlpar\\sa160\\sl252\\slmult1\\kerning2\\f0\\fs22\\lang1030 Header 1:\\par");
rtf.Append("");
rtf.Append("\\pard{\\pntext\\f2\\'B7\\tab}{\\*\\pn\\pnlvlblt\\pnf2\\pnindent0{\\pntxtb\\'B7}}\\widctlpar\\fi-360\\li720\\sa160\\sl252\\slmult1 {{\\field{\\*\\fldinst{HYPERLINK \"https://link1\"}}{\\fldrslt{\\ul\\cf1\\cf2\\ul Link 1}}}}\\f0\\fs22\\par");
rtf.Append("{\\pntext\\f2\\'B7\\tab}{{\\field{\\*\\fldinst{HYPERLINK \"https://link2\"}}{\\fldrslt{\\ul\\cf1\\cf2\\ul Link 2}}}}\\f0\\fs22\\par");
rtf.Append("");
rtf.Append("\\pard\\widctlpar\\sa160\\sl252\\slmult1 Header 2:\\par");
rtf.Append("");
rtf.Append("\\pard{\\pntext\\f2\\'B7\\tab}{\\*\\pn\\pnlvlblt\\pnf2\\pnindent0{\\pntxtb\\'B7}}\\widctlpar\\fi-360\\li720\\sa160\\sl252\\slmult1 {{\\field{\\*\\fldinst{HYPERLINK \"https://link3\"}}{\\fldrslt{\\ul\\cf1\\cf2\\ul Link 3}}}}\\f0\\fs22\\par");
rtf.Append("");
rtf.Append("\\pard\\sa200\\sl276\\slmult1\\kerning0\\f1\\lang6\\par");
rtf.Append("}");
richTextBoxRessources.Rtf = rtf.ToString();
Dies ist mein Code:
Code: Select all
private async void InitializeWebView()
{
await webView21.EnsureCoreWebView2Async(null);
// Handle navigation events
webView21.CoreWebView2.NavigationStarting += (sender, args) =>
{
Debug.WriteLine("NavigationStarting: " + args.Uri);
if (args.Uri.StartsWith("file://", StringComparison.OrdinalIgnoreCase))
{
args.Cancel = true;
string localPath = new Uri(args.Uri).LocalPath;
Process.Start(new ProcessStartInfo(localPath) { UseShellExecute = true });
}
};
// HTML
string htmlContent = @"
Local File Test
Try opening local files:
[list]
[url=file:///C:\\GlDifxCmd.log]Open local log file[/url]
[*][url=https://www.google.com]Google[/url]
[/list]
";
webView21.NavigateToString(htmlContent);
}