zoukankan      html  css  js  c++  java
  • TX Text Control文字处理教程(4)标记文本域

    标记文本域是在文本中插入的一些标记,在文字处理器中可以通过标记文本来实现非常广泛的文字处理功能。例如:

    •         邮件合并
    •         电子表格中的计算域
    •         书签
    •         自动生成表格内容和索引
    •         超文本链接和锚点


    标记文本域可以由任意字符组合而成,TX 中最多可以包含65535个标记文本域,TX会维护这些文本域的位置和编号信息,同时还可以进行加载、保存和剪贴板操作。
    该章节相应的源代码可以在TX Text Control.NET的安装目录中找到:

    •         Samples\WinForms\VB.NET\ Printing
    •         Samples\WinForms\CSharp\ Printing


    第一节:创建标记文本域
    该节主要演示如何创建标记文本域和标记文本域的Click事件。示例程序中包含一个菜单项【Insert Field!】、两个Text Control控件,其中一个是普通文本编辑窗口,另一个是提示信息窗口。以下代码演示如何创建一个标记文本域:

    private void mnuInsertField_Click(object sender, System.EventArgs e) 
    {
    TXTextControl.TextField newField = new TXTextControl.TextField();
    newField.Text = "--------";
    newField.ID = fieldID;
    fieldID += 1;
    textControl1.TextFields.Add(newField);
    }



    通过以上代码在当前输入位置插入一个文本域,并且给文本域的ID属性设置一个位置的值。当鼠标移动至文本域时Text Control 会将光标变为手型光标,以此提示用户当前位置有一个文本域,此时点击文本域会触发TextFieldClicked事件,而且会弹出一个显示当前文本域编号的提示框。

    private void textControl1_TextFieldClicked(object sender, TXTextControl.TextFieldEventArgs e) 
    {
    // Field has been clicked on, update text of second TX and display it
    textControl2.Text = "Field clicked, ID: " + e.TextField.ID;
    textControl2.BringToFront();
    }
    private void textControl1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
    {
    textControl1.BringToFront();
    }



    第二节:书签
    该示例演示如何使用标记文本域来创建书签。首先我们将用文本域的编号来访问该文本域。示例程序中包含一个【Bookmar】菜单,包含两个子菜单项【Insert】和【Go to...】。点击【Insert】菜单时会在当前位置创建一个文本域;如果选择文本不为空会将选中的文本转换为标记文本域,代码如下:

    private void mnuBookmark_Insert_Click(object sender, System.EventArgs e) 
    {
    if (textControl1.Text == "")
    {
    MessageBox.Show("Cannot insert a bookmark if the Text Control is empty.");
    }
    else if (textControl1.Selection.Length == 0)
    {
    textControl1.Selection.Length = 1;
    }
    else
    {
    TXTextControl.TextField newField = new TXTextControl.TextField();
    newField.ID = fieldID;
    newField.Text = textControl1.Selection.Text;
    textControl1.Selection.Text = "";
    fieldID += 1;
    textControl1.TextFields.Add(newField);
    }
    }



    在文档中输入一些文本并插入一些书签,然后选择【Go To...】菜单,此时会弹出一个对话框,可以在对话框中输入书签的编号,如果该书签存在点击【OK】按钮会自动跳转到书签所在的位置,实现代码如下:

    private void cmdOK_Click(object sender, System.EventArgs e) 
    {
    if (Convert.ToInt32(textBox1.Text) > tx.TextFields.Count)
    {
    MessageBox.Show ("Invalid bookmark number!");
    }
    else
    {
    foreach (TXTextControl.TextField field in tx.TextFields)
    {
    if (field.ID == Convert.ToInt32(textBox1.Text))
    {
    tx.Selection.Start = field.Start - 1;
    tx.Selection.Length = field.Length;
    }
    }
    }
    Close();
    }



    第三节:为书签指定名称
            在商业的文本编辑器中,不仅可以通过编号来访问书签,还可以通过书签名来访问。用户在创建书签时可以为书签指定名称。在【GoTo Bookmark】对话框中用户可以选择书签名称,然后跳转到该书签所在位置。
    在创建书签时,用户需要为书签指定一个名称。实现代码如下:

    private void cmdOK_Click(object sender, System.EventArgs e) 
    {
    TXTextControl.TextField field = new TXTextControl.TextField();

    field.Name = textBox1.Text;
    field.Text = tx.Selection.Text;
    tx.Selection.Text = "";

    tx.TextFields.Add(Field);
    Close();
    }



    通过以上操作,我们创建了书签并指定了书签的名字。下面将在【Goto Bookmark】对话框中显示所有书签的名字,实现代码如下:

    private void frmGotoDialog_Load(object sender, System.EventArgs e) 
    {
    foreach (TXTextControl.TextField Field in tx.TextFields) {
    ComboBox1.Items.Add(Field.Name);
    }
    }



    在用户选择书签之后点击【OK】按钮时,将通过遍历全部书签的方式找到用户指定的书签,实现代码如下:

    private void cmdOK_Click(object sender, System.EventArgs e) 
    {
    foreach (TXTextControl.TextField field in tx.TextFields)
    {
    if (field.Name == comboBox1.Text)
    {
    tx.Selection.Start = field.Start - 1;
    tx.Selection.Length = field.Length;
    }
    }
    Close();
    }



    TX Text Control试用版下载



    本文是由葡萄城技术开发团队发布,转载请注明出处:葡萄城官网


  • 相关阅读:
    Note/Solution 转置原理 & 多点求值
    Note/Solution 「洛谷 P5158」「模板」多项式快速插值
    Solution 「CTS 2019」「洛谷 P5404」氪金手游
    Solution 「CEOI 2017」「洛谷 P4654」Mousetrap
    Solution Set Border Theory
    Solution Set Stirling 数相关杂题
    Solution 「CEOI 2006」「洛谷 P5974」ANTENNA
    Solution 「ZJOI 2013」「洛谷 P3337」防守战线
    Solution 「CF 923E」Perpetual Subtraction
    KVM虚拟化
  • 原文地址:https://www.cnblogs.com/powertoolsteam/p/2337300.html
Copyright © 2011-2022 走看看