C# Windows -Formulare und URL in Linknamen eingebettet?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 C# Windows -Formulare und URL in Linknamen eingebettet?

Post by Anonymous »

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 .

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();
Obwohl es wie ein Link im RichTextBox aussieht, reagiert es beim Klicken nicht.

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");
}
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>

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();
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:

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);
}
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.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post