1

我正在开发一个 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 :)

4

1 回答 1

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”事件更改光标并对鼠标单击做出反应。

希望这会有所帮助,问候

于 2011-09-18T21:15:06.253 回答