C# кроссплатформенные URL-адреса RichTextBox или альтернативное решение

Я занимаюсь разработкой приложения на 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 "";
        }

просто добавьте все ссылки в стек ссылок и используйте GetLink внутри события MouseDown:)

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".

надеюсь, что это помогает, привет

Другие вопросы по тегам