文字区域和超链接?

时间:2012-01-01 04:03:11

标签: c# winforms text hyperlink

我在Visual Studio中有两个关于C#的快速简单的问题。首先,是否有类似标签的东西,但对于程序中的文本区域?我希望在我的程序中有多行文本,但只能使用带有wordwrap的DotNetBar标签来完成它。

第二,有没有办法在不使用链接标签的情况下在文本中间添加超链接?如果我想生成“可以更新,请访问http://example.com以下载它!”这样的文字,是否可以使链接无法在文本中间放置链接标签而点击?

4 个答案:

答案 0 :(得分:4)

您可以使用LinkLabel并设置其LinkArea属性:

 //LinkArea (start index, length)
 myLinkLabel.LinkArea = new LinkArea(37, 18);
 myLinkLabel.Text = "An update is available, please visit http://example.com to download it!";

以上内容将使http://example.com成为一个链接,而其他文本则正常。

编辑以回答评论: 处理链接有多种方法。一种方法是为链接提供描述(URL),然后使用Process.Start启动URL。

myLinkLabel.LinkArea = new System.Windows.Forms.LinkArea(37, 18);
myLinkLabel.LinkClicked += new LinkLabelLinkClickedEventHandler(myLinkLabel_LinkClicked);
myLinkLabel.Text = "An update is available, please visit http://example.com to download it!";       
myLinkLabel.Links[0].Description = "http://example.com";

事件处理程序可以读取描述并启动站点:

void myLinkLabel_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
    Process.Start(e.Link.Description);
}

答案 1 :(得分:2)

您可以尝试RichTextBox控制。

string text = "This is the extract of text located at http://www.google.com and http://www.yahoo.com";
richTextBox1.Text   = text;

richTextBox1.ReadOnly = true;
richTextBox1.LinkClicked += (sa, ea) =>
{
 System.Diagnostics.Process.Start(ea.LinkText);
};

答案 2 :(得分:1)

您可以使用普通标签并将AutoSize属性设为false。 然后调整你的宽度和高度它将自己包裹

答案 3 :(得分:0)

我假设您正在使用Windows应用程序,而不是Web应用程序。

在C#中,您可以通过将其拖放到表单上来创建普通文本框,将其属性更改为多行,并将其设置为只读。这就是我一直以来做的事情。

至于在没有链接标签的情况下添加文本链接。有一种方法可以添加文本框的链接。您可以在http://www.codeproject.com/KB/miscctrl/LinkTextBox.aspx/

查看相当不错的教程