C#跨平台RichTextBox URL或替代解决方案

时间:2011-09-18 00:41:36

标签: c# mono richtextbox mud

我正在开发一个C#应用程序来与MUD / MOO服务器通信。基本上它需要文本并在屏幕上显示它。目前我正在使用RichTextBox来显示文本,我的彩色文本工作正常,我只需要实现URL,但是在这样做时我发现要添加带有自定义文本的URL(例如,不是http://,就像:点击这里)我需要使用Win32 API,我根本不能这样做......这需要在linux上运行单声道(可能还有mac)。反正有没有让这项工作?或者我应该采取什么替代途径? (我正在考虑转换为HTML,但是有一个很好的跨平台HTML控件吗?)(所有这些都是免费的)。

先谢谢。

我设法最终使用:

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

1 个答案:

答案 0 :(得分:1)

作为替代方案,您可以使用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");

其中textview1是Gtk.TextView。

您应该可以使用“motion-notify-event”和“event-after”事件更改光标并对鼠标点击做出反应。

希望这有帮助,尊重