TX Text Control文字处理教程(4)标记文本域

原创
2014/06/11 12:00
阅读数 438

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

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


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

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


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

 


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

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

 


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

 

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

 


  
  
  1. private void mnuBookmark_Insert_Click(object sender, System.EventArgs e)  
  2. {  
  3.     if (textControl1.Text == "")  
  4.     {  
  5.         MessageBox.Show("Cannot insert a bookmark if the Text Control is empty.");  
  6.     }  
  7.     else if (textControl1.Selection.Length == 0)  
  8.     {  
  9.         textControl1.Selection.Length = 1;  
  10.     }  
  11.     else  
  12.     {  
  13.         TXTextControl.TextField newField = new TXTextControl.TextField();  
  14.         newField.ID = fieldID;  
  15.         newField.Text = textControl1.Selection.Text;  
  16.         textControl1.Selection.Text = "";  
  17.         fieldID += 1;  
  18.         textControl1.TextFields.Add(newField);  
  19.     }  

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

 


  
  
  1. private void cmdOK_Click(object sender, System.EventArgs e)  
  2. {  
  3.     if (Convert.ToInt32(textBox1.Text) > tx.TextFields.Count)  
  4.     {  
  5.         MessageBox.Show ("Invalid bookmark number!");  
  6.     }  
  7.     else  
  8.     {  
  9.         foreach (TXTextControl.TextField field in tx.TextFields)  
  10.         {  
  11.             if (field.ID == Convert.ToInt32(textBox1.Text))  
  12.             {  
  13.                 tx.Selection.Start = field.Start - 1;  
  14.                 tx.Selection.Length = field.Length;  
  15.             }  
  16.         }  
  17.     }  
  18.     Close();  

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

 


  
  
  1. private void cmdOK_Click(object sender, System.EventArgs e)  
  2. {  
  3.     TXTextControl.TextField field = new TXTextControl.TextField(); 
  4.  
  5.     field.Name = textBox1.Text;  
  6.     field.Text = tx.Selection.Text;  
  7.     tx.Selection.Text = ""
  8.  
  9.     tx.TextFields.Add(Field);  
  10.     Close();  

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

 


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

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

 


  
  
  1. private void cmdOK_Click(object sender, System.EventArgs e)  
  2. {  
  3.     foreach (TXTextControl.TextField field in tx.TextFields)  
  4.     {  
  5.         if (field.Name == comboBox1.Text)  
  6.         {  
  7.             tx.Selection.Start = field.Start - 1;  
  8.             tx.Selection.Length = field.Length;  
  9.         }  
  10.     }  
  11.     Close();  

 

TX Text Control试用版下载

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部