1

MUD/MOO サーバーと通信する C# アプリケーションを開発しています。基本的に、テキストを取得して画面に表示します。現時点では、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 に答える