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

c#跨平台RichTextBox url或替代解决方案

作为替代,你可以使用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"事件对鼠标点击做出反应。

希望这对你有帮助