← 返回所有博客文章

本章节将演示如何在文档中添加超链接和锚点,以及如何响应超链接的单击操作。

本章节相应的源代码可以在TX Text Control.NET的安装目录中找到:
        Samples\WinForms\VB.NET\ Hyperlinks
        Samples\WinForms\CSharp\ Hyperlinks

第一步:插入超链接
        在这个示例程序中将在文档里插入一个超链接,并将该文档保存为HTML格式,便于在浏览器中显示。


        为了在文档中插入超链接,首先需要创建一个HypertextLink的实例,创建实例时传入 ”Text Control Web Site” 和 ” http://www.textcontrol.com” 作为参数。 HypertextLink实例被插入到当前光标所在的位置,并被添加到HypertextLinks集合中。

 
[C#]
private void cmdInsertHyperlink_Click(object sender, System.EventArgs e)
{
    // Create a HypertextLink object
    TXTextControl.HypertextLink MyLink =
        new TXTextControl.HypertextLink(
        "Text Control Web Site",
        "http://www.textcontrol.com");
    // Insert the hyperlink into the document
    textControl1.HypertextLinks.Add(MyLink);
}
复制代码

需要注意的是上面的例子并没有处理Click事件,所以点击超链接时并没有跳转到指定的网页,而且超链接也没有蓝色下划线的字体样式。事件处理以及显示样式将在第二步中完成。
        下面调用TextControl.Save方法来讲文档保存为HTML格式的文件:

 
[C#]
private void cmdSaveAs_Click(object sender, System.EventArgs e)
{
    textControl1.Save(TXTextControl.StreamType.HTMLFormat);
}
复制代码

使用浏览器打开刚才保存的HTML文件,可以看到刚才添加的超链接


第二步:为新建超链接添加对话框
在第二个示例程序中,添加了一个对话框,这样就可以更方便的创建超链接。除此之外,还可以对之前插入的超链接进行编辑和修改。需要注意的是,超链接通常是和 HTML文件相关联,不过超链接还可以保存在RTF、微软Word文件以及TX Text Control格式的文件中。


        新添加的对话框包含两个文本框,第一个是设置超链接显示的文本信息,第二个用于设置超链接对应的链接地址。该对话框可用于创建超链接和编辑超链接,如果光标所在的位置是一个超链接则进行编辑操作,否则用于创建新的超链接。

 
[C#]
private void mnuInsert_Hyperlink_Click(object sender, System.EventArgs e)
{
    frmHyperlinks Hyperlinks = new frmHyperlinks();
    Hyperlinks.tx = textControl1;
    Hyperlinks.ShowDialog();
    HighlightHyperlinks (textControl1, mnuView_Hyperlinks.Checked);
}
复制代码

当该对话框加载时会根据当前输入位置来决定链接文本和链接地址中应该显示的信息:

 
[C#]
private void frmHyperlinks_Load(object sender, System.EventArgs e)
{
    TXTextControl.HypertextLink HyperLink = tx.HypertextLinks.GetItem();
    if (HyperLink != null)
    {
        // If there is an existing hypertext link at the input position,
        // copy its text and target to the text boxes on the form.
        txtLinkedText.Text = HyperLink.Text;
        txtLinkTo.Text = HyperLink.Target;
    }
    else
    {
        // If there is no hypertext link at the input position, but
        // some text has been selected, then copy this text to the
        // Linked Text text box.
        if  (tx.Selection.Length > 0)  
            txtLinkedText.Text = tx.Selection.Text;
    }
}
复制代码

用户修改链接文本和链接地址之后点击【OK】按钮,输入的信息将被更新到文档中:

 
[C#]
private void cmdOK_Click(object sender, System.EventArgs e)
{
    TXTextControl.HypertextLink HyperLink = tx.HypertextLinks.GetItem();
    if (HyperLink == null)
    {
        // Insert a new link
        TXTextControl.HypertextLink NewLink =
            new TXTextControl.HypertextLink(
            txtLinkedText.Text , txtLinkTo.Text);
        tx.HypertextLinks.Add(NewLink);
    }
    else
    {
        // Update an existing link
        HyperLink.Text = txtLinkedText.Text;
        HyperLink.Target = txtLinkTo.Text;
    }
    Close();
}
复制代码

最后,添加一个【View】菜单项用于设置超链接文字的格式,包括蓝色字体和下划线样式:

 
[C#]
void HighlightHyperlinks(TXTextControl.TextControl tx, bool bHighlight)
{
    int PreviousStart = tx.Selection.Start,
        PreviousLength = tx.Selection.Length;

    foreach (TXTextControl.HypertextLink Link in tx.HypertextLinks)
    {
        tx.Selection.Start = Link.Start-1;
        tx.Selection.Length = Link.Length;
        if (bHighlight)
        {
            tx.Selection.ForeColor = Color.Blue;
            tx.Selection.Underline = TXTextControl.FontUnderlineStyle.Single;
        }
        else
        {
            tx.Selection.ForeColor = Color.Black;
            tx.Selection.Underline = TXTextControl.FontUnderlineStyle.None;
        }
    }
    tx.Selection.Start = PreviousStart;
    tx.Selection.Length = PreviousLength;
}
复制代码

第三步:添加文档锚点
        在第一和第二步中使用的链接地址都是外部资源,在该示例中讨论如何链接到文档中的某个位置。这些链接叫做文档链接,而这些被指定的位置叫做文档目标,文档目标在HTML编辑器中也被当做锚点、在字处理器中被当做书签来使用。
        在运行示例程序时,在文档添加一些文本,然后再通过Insert / Target来添加一些文档目标。


        通过Insert / Hypertext Link 菜单为这些文档目标添加链接,之前添加的文档目标的名字将被显示在链接位置的下拉框中。


插入目标
通过给DocumentTargets集合添加一个DocumentTarget对象的方式来添加文档目标。与链接不同的是,文档目标没有可见的文本,所以其构造函数只有一个参数。

 
[C#]
TXTextControl.DocumentTarget Target =
    new TXTextControl.DocumentTarget(InsertTarget.TargetName);                                
textControl1.DocumentTargets.Add(Target);
复制代码

为目标添加链接
需要对步骤二中使用的【Hypertext Link】对话框进行扩展,因为,链接目标不仅可以设置为URL,还可以设置为文档目标。将之前的【Link To】文本框替换为一个下拉框,下拉框中显示的DocumentTargets集合中的目标对象。

 
[C#]
foreach (TXTextControl.DocumentTarget Target in tx.DocumentTargets)
    cboLinkTo.Items.Add("#" + Target.TargetName);
复制代码

跳转到目标
当点击文档中的链接时,文本区域应该滚动的链接对应的目标所在的位置。该功能可以在DocumentLinkClicked事件中调用ScrollTo方法来实现:

 
[C#]
private void textControl1_DocumentLinkClicked(object sender,
    TXTextControl.DocumentLinkEventArgs e)
{
    e.DocumentLink.DocumentTarget.ScrollTo();
}
复制代码