c#跨平台RichTextBox url或替代解决方案
本文关键字:解决方案 url 跨平台 RichTextBox | 更新日期: 2023-09-27 18:09:07
我正在开发一个与MUD/MOO服务器通信的c#应用程序。基本上它获取文本并显示在屏幕上。此刻我正在使用一个RichTextBox来显示文本,我有彩色文本工作很好,我只需要实现url,然而,在这样做的同时,我发现添加url与自定义文本(例如不http://,喜欢:点击这里)我需要使用Win32 API,我不能这样做…在所有。这需要在linux(也可能是mac)上的mono工作。有办法解决这个问题吗?或者我应该选择什么其他途径?(我正在考虑切换到HTML,但是有一个好的跨平台HTML控件吗?)(所有这些都必须是免费的)。
Thanks in advanced.
最后我用:
Stack<Link> Links = new Stack<Link>();
internal class Link
{
public int starts = 0;
public int ends = 0;
public string url = "";
}
private string GetLink(RichTextBox rtb, Point point)
{
int index = rtb.GetCharIndexFromPosition(point);
foreach (Link link in Links.ToArray())
if (link.starts <= index && link.ends >= index)
return link.url;
return "";
}
只需将所有链接附加到links堆栈中,并在MouseDown事件中使用GetLink:)
作为替代,你可以使用GtkTextView,它应该是跨平台的。您可以使用下面的代码添加超链接样式的文本:
TextTag tag = new TextTag("link");
tag.Foreground = "blue";
tag.Underline = Pango.Underline.Single;
textview1.Buffer.TagTable.Add(tag);
Gtk.TextIter iter = textview1.Buffer.GetIterAtOffset(0);
textview1.Buffer.InsertWithTagsByName(ref iter, "link text", "link");
where textview1 is Gtk.TextView.
你应该能够改变光标,并使用"motion-notify-event"answers"event-after"事件对鼠标点击做出反应。
希望这对你有帮助