找回密码
 立即注册

QQ登录

只需一步,快速开始

DCAgile

中级会员

83

主题

247

帖子

794

积分

中级会员

积分
794

活字格认证微信认证勋章元老葡萄

DCAgile
中级会员   /  发表于:2015-8-18 17:47  /   查看:6282  /  回复:9
模版内容如下:

你好       ,我想你了               !!!

操作如下:

1.在模版    出输入内容并存入数据库

2.再次加载模版,首先加载原始模版,同时将       中的内容显示(需要保留原有的格式)??


问题:操作   2   中 应该怎么操作??

9 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2015-8-19 09:58:00
沙发
回复 1楼DCAgile的帖子

完成这个功能需要两个功能点:
1.需要使用bookmark标记要加载数据库内容,也就是“________”的位置。
请参考:链接 书签部分。
2.存入数据库中的内容要保留原有格式。
使用TextControl.Selection.Save 和 TextControl.Selection.Load 方法进行保存和加载。格式为 WordprocessingML(docx)
回复 使用道具 举报
DCAgile
中级会员   /  发表于:2015-8-19 13:38:00
板凳
回复 2楼iceman的帖子

1.能不能获取 指定的bookmark  的值??

2.给添加bookmark  的    添加事件怎么添加?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-19 18:58:00
地板
回复 3楼DCAgile的帖子

可以参考该路径下的Demo:
%USERPROFILE%\My Documents\TX Text Control 22.0.NET for Windows Forms\Samples\WinForms\CSharp\TextFields\Fields2

其中添加书签是使用TextField 添加的。所以点击事件就是 TextField Click 事件。

获取指定的Bookmark 需要遍历所有的 TextFields 根据ID判断。

明天上午会跟您电话进行沟通。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-20 10:32:00
5#
回复 3楼DCAgile的帖子

获取点击 TextField 信息方法如下:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             TextField tf = new TextField();
  4.             tf.Name = "field1";

  5.             this.textControl1.TextFields.Add(tf);

  6.             this.textControl1.TextFieldClicked += textControl1_TextFieldClicked;
  7.         }

  8.         void textControl1_TextFieldClicked(object sender, TextFieldEventArgs e)
  9.         {
  10.             int id = e.TextField.ID;
  11.             string name = e.TextField.Name;
  12.         }
复制代码
回复 使用道具 举报
DCAgile
中级会员   /  发表于:2015-8-20 11:13:00
6#

Bookmark添加事件无法触发

回复 5楼iceman的帖子

如下所示代码(添加的事件无法触发——是什么原因?):

具体代码以及模版内容 请查看附近BookMark.rar

public partial class Form1 : Form
    {
        private string FilePath = Application.StartupPath + "\\Template\\bookmark.doc";
        DocumentTargetCollection DTC;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TXTextControl.LoadSettings ls = new TXTextControl.LoadSettings();
            ls.ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord;
            ls.ApplicationFieldTypeNames = new string[] { "MERGEFIELD" };
            this.textControl1.Load(FilePath, StreamType.MSWord, ls);

            DTC = this.textControl1.DocumentTargets;

            foreach (DocumentTarget item in DTC)
            {
                TextField tf = new TextField();
                tf.Name = item.TargetName;
                this.textControl1.TextFields.Add(tf);

                this.textControl1.TextFieldClicked+=textControl1_TextFieldClicked;
            }
        }

        void textControl1_TextFieldClicked(object sender, TextFieldEventArgs e)
        {
            int id = e.TextField.ID;
            string name = e.TextField.Name;
            string text = e.TextField.Text;
            MessageBox.Show("value==" + text);
        }
    }

BookMark.rar

54 KB, 下载次数: 235

回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-20 14:03:00
7#
回复 6楼DCAgile的帖子

通过Bookmark定位,替换目标文本为 TextField 测试代码如下:

  1.         private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             TXTextControl.LoadSettings ls = new TXTextControl.LoadSettings();
  4.             ls.ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord;
  5.             ls.ApplicationFieldTypeNames = new string[] { "MERGEFIELD" };
  6.             this.textControl1.Load(FilePath, StreamType.MSWord, ls);

  7.             DTC = this.textControl1.DocumentTargets;
  8.             this.textControl1.DocumentLinkClicked += textControl1_DocumentLinkClicked;
  9.             List<int> bookmarks = new List<int>();

  10.             foreach (DocumentTarget item in DTC)
  11.             {
  12.                 bookmarks.Add(item.Start);
  13.             }

  14.             this.textControl1.Select(bookmarks[0]-1, bookmarks[1]-bookmarks[0]);

  15.             TextField tf = new TextField();
  16.             tf.Text = this.textControl1.Selection.Text;
  17.             this.textControl1.Selection.Text="";
  18.             this.textControl1.Select(bookmarks[0],0);
  19.             this.textControl1.TextFields.Add(tf);

  20.             this.textControl1.TextFieldClicked += textControl1_TextFieldClicked;
  21.         }
复制代码
回复 使用道具 举报
DCAgile
中级会员   /  发表于:2015-8-20 15:16:00
8#
回复 7楼iceman的帖子

this.textControl1.Select(bookmarks[0]-1, bookmarks[1]-bookmarks[0]);

            TextField tf = new TextField();
            tf.Text = this.textControl1.Selection.Text;
            this.textControl1.Selection.Text=&quot;&quot;;
            this.textControl1.Select(bookmarks[0],0);

看了一下你提供的代码,主要代码是“加粗”的代码

Q1:这两个地方代码的关系??
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-8-20 16:43:00
9#
回复 8楼DCAgile的帖子

第一次是选择目标文本,也就是 aabb,第二次是选择 textfield插入位置。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2015-9-1 11:51:00
10#
回复 8楼DCAgile的帖子

为了给你提供更优质的服务,请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部