这几天一贯在讨论TX Text
Control的运用,由于那上边的素材绝相比较较少,首要靠下载版本的案例代码举办研讨,以及法定的一些博客案例实行学习,使用总计了有个别经验,特将其总括出来,供我们分享学习。本篇小说主要介绍TX
Text Control V20的连带应用体验。

在不少文书档案管理的功效模块里面,我们一再须求对WO奇骏D牢固展开体现、编辑等管理,而只要利用微软word控件进行拍卖,必要安装WOCRUISERD组件,而且接口使用也有失得轻松易用,因而①旦有第二方且不用安装Office的能够展现WO冠道D及开始展览编写制定,那是比较不错的挑叁拣四,TX
Text
Control便是那样的控件,本文便是依赖这么些控件的应用,实现在文书档案管理项目中的应用。

一、TX Text Control控件介绍

TX Text Control是壹款效果看似于 MS Word
的文字处理控件,包含文书档案成立、编辑、打印、邮件合并、格式调换、拆分合并、导入导出、批量调换等作用。普遍应用于集团文书档案管理,网站内容公布,电子病历中病案模板创造、病历书写、修改历史、三番五次打字与印刷、病案归档等效果的兑现。

本条控件首要的机能正是能够当做Word以及别的文档的编辑器使用,即便展现WOKugaD内容的控件也有壹对,如我们能够接纳DevExpress里面包车型地铁RTF文书档案编辑器来促成,一样运营的很好,结合Aspose.Word后台的文书档案管理,大家能够成功类似报表的多寡变动,而且能够把变化后的文书档案举办展示、编辑等操作管理。

TX Text
Control纵然作为文书档案编辑各方面都表现不错,可是其MailMerge邮件合并功效照旧日常选拔的二个效果,正是把大家的数码和文档模板来四个联合,然后彰显最终的文书档案内容,那种能够用来做一些好像收据、邮件、职员和工人音信等的多寡管理和展示,MailMerge邮件合并能够绑定主从表的数据,可以契合繁多的渴求。

笔者当然想用它做一个像样电子病历同样的功用模块,不说在文书档案里面,大家很难成功一些下拉列表的管理(
官方博客里面有3个归纳的案例,可是倒霉用),一般情况下,假设大家只是做文书档案展现、数据统一等平常的操作,照旧很准确的。

这一个控件的职能介绍,能够参见草龙珠城里头的网页介绍(),那一个控件的连锁开辟职员使用然后分享经验的篇章很少,能在网络搜到的大多是山葫芦城职员对这些控件的德姆o代码实行几个简约粘贴表明,未有进一步的深刻介绍和动用场景的牵线。固然山葫芦城列举了多少个电子病历的店堂产品案例,可是这几家公司的电子病历产品是很难下载到,也不许知道真假大概应用状态。

这几天自个儿把这些控件的各样特色做了壹部分就学,并再度把官方网站的文书档案编辑例子进行了斩新开辟,参考着做了八个一心同样的编辑器版本,也大概对它的相继属性、方法处理有了3个进一步深切的问询。

大家先经过叁个软件分界面来打探任何软件的有的功用(那个是自身仿照官方案例做的3个主次)。

金沙注册送58 1

其一控件暗中认可安装后,会含有多数德姆o案例,具体能够参考目录C:\Users\Administrator\Documents\TX
Text Control 20.0.NET for Windows Forms\Samples\ 举行问询。

 

文字处理控件TX,Control实行WOLX570D文书档案的编排呈现管理。1、TX Text Control的牵线及应用

TX Text Control是一款效果周围于 MS Word
的文字管理控件,包含文书档案创制、编辑、打字与印刷、邮件合并、格式转变、拆分合并、导入导出、批量扭转等成效。分布应用于公司文档管理,网站内容公布,电子病历中病案模板创制、病历书写、修改历史、延续打字与印刷、病案归档等职能的得以落成。那个控件首要的效劳正是能够当做Word以及其余文书档案的编辑器使用,全体显示的效果非凡靠近原生WOSportageD的来得,是1款万分科学的控件套件。

在小编较早的一篇随笔《文字处理控件TX Text
Control的应用》里面,大致轻松的介绍了这些控件的行使,而且本身把那些本子的英文能源总体汉化并拓展了编写翻译使用,基本上全数的效劳都以突显不荒谬的华语了,那样更适合我们实际项目标利用了。

咱俩在VS工具栏里面插手相应的控件,能够观望有以下相关的控件对象可供使用,一般景色下大家采纳TextControl,然后在其基础上创建其余RulerBar、ButtonBar、StatusBar就可以,而一旦大家必要联合数据(很常用)就供给出席MailMerge控件对象。

金沙注册送58 2

添加控件后,大家得以对控件的有关基础的复制、粘贴、剪切等操作能够直接选用控件的API就能够兑现。

我们这里关键目标是在WInform项目中合拢该控件的采纳,就不像上篇那样介绍使用它编写2个完好无缺独立的Word管理那样了。

如上边就是把相关的控件拖动到自定义控件上的作用。

金沙注册送58 3

类代码如下所示:

    /// <summary>
    /// 基于TxTextControl控件的自定义控件封装
    /// </summary>
    public partial class TextWordControl : XtraUserControl

除此以外效劳开关能够自定义,扩大或然减弱部分开关作用,如下列表所示。

金沙注册送58 4

 

二、TX Text Control控件的汉化

那个控件分界面暗许是英文版本的,控件的相干菜单以及提醒都以英文,由此大家要求对财富做一些国语本地化管理技巧科学展现。

合法未有提供中文汉化包,只提供四个标准的英文能源,如下所示。

金沙注册送58 5

作者们要求做的正是将它们实行汉译,然后重新编写翻译(使用buildres.bat脚本编写翻译)为华语能源dll。

我们先使用VS编辑工具,把这个英文能源记录转变为英文(这是1个相比较麻烦的职业,官方网站上有一些旧版本的中文包可供参考,以及最新的V20软件(编辑器软件)下载下来运营参照)。

金沙注册送58 6

咱俩逐条进行中文管理,能够使用百度、谷歌(Google)的翻译,以及软件分界面包车型地铁参考哦。

金沙注册送58 7

以管理员格局运转VS的命令行,然后推行命令举办编写翻译财富就能够。

buildres.bat zh-CN

金沙注册送58 8

编译成功后,在目录里面,会增添七个财富程序集。

txdocumentserver.resources.dll

txtextcontrol.resources.dll

下一场我们把它复制到运转目录下,并放在zh-CN的目录里面就可以。有了这个普通话化的财富程序集,大家就足以选拔它举办对控件的停放菜单提示进行汉语化了。

中文化操作和其余常规的做法未有差距于,大家在Main函数里面,增加如下代码就能够。

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");

运作程序,大家使用右键菜单,开掘在那之中的能源都曾经符合规律汉化了,别的有关的内置菜单和分界面也都足以看看符合规律汉化。

金沙注册送58 9

 

二、TX Text Control自定义控件的代码完结和行使

为了落到实处那么些WOTiguanD编辑控件的有的按钮操作,如总体抉择(Ctrl+A)、查找(Ctrl+F)、替换(Ctrl+H)等基础操作,大家要求在控件代码中贯彻相关的按钮事件处理,那样大家利用这个开关就可以直接调用控件的内置管理窗体了,具体代码如下所示。

    /// <summary>
    /// 基于TxTextControl控件的自定义控件封装
    /// </summary>
    public partial class TextWordControl : XtraUserControl
    {
        public TextWordControl()
        {
            InitializeComponent();


            InitEvent();
        }

        /// <summary>
        /// 处理控件的事件
        /// </summary>
        private void InitEvent()
        {
            Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");

            this.textControl1.KeyDown += textControl1_KeyDown;
        }

        void textControl1_KeyDown(object sender, KeyEventArgs e)
        {
            HandleKeyDownEvent(e);
        }

        private void HandleKeyDownEvent(KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Insert:
                    if (e.Control || e.Alt || e.Shift) break;
                    //插入按键操作
                    textControl1.InsertionMode
                       = textControl1.InsertionMode == TXTextControl.InsertionMode.Insert
                       ? TXTextControl.InsertionMode.Overwrite
                       : TXTextControl.InsertionMode.Insert;
                    break;

                case Keys.A:
                    if (!e.Control || e.Alt || e.Shift) break;
                    // Ctrl-A: 全选操作
                    textControl1.SelectAll();
                    break;

                case Keys.F:
                    if (!e.Control || e.Alt || e.Shift) break;
                    // Ctrl-F: 查找操作
                    textControl1.Find();
                    break;

                case Keys.H:
                    if (!e.Control || e.Alt || e.Shift) break;

                    // Ctrl-H: 替换操作
                    textControl1.Replace();
                    break;
            }
        }

金沙注册送58 ,如搜寻和替换的停放对话框分界面如下所示。

金沙注册送58 10

金沙注册送58 11

出于WORubiconD文书档案数据,大家存款和储蓄在数据Curry面一般采纳的是二进制存款和储蓄,由此还须求安装3个自定义控件的属性用来设置获取获取文书档案控件的数目标,具体代码如下所示。

        /// <summary>
        /// 文档数据
        /// </summary>
        [Browsable(false)]
        public byte[] DocData
        {
            get
            {
                byte[] docData = null;
                textControl1.Save(out docData, TXTextControl.BinaryStreamType.MSWord);
                return docData;
            }
            set
            {
                if (value != null)
                {
                    try
                    {
                        textControl1.Load(value, TXTextControl.BinaryStreamType.MSWord);
                    }
                    catch(Exception ex)
                    {
                        LogHelper.Error(ex);
                        MessageDxUtil.ShowError(ex.Message);
                    }
                }
            }
        }

然后再提供的接口函数,用来加载本地WO中华VD文书档案的多寡,具体代码如下所示。

        public void LoadData(string file)
        {
            if (!string.IsNullOrEmpty(file))
            {
                try
                {
                    this.textControl1.Load(file, TXTextControl.StreamType.MSWord);
                }
                catch (Exception ex)
                {
                    LogHelper.Error(ex);
                    MessageDxUtil.ShowError(ex.Message);
                }
            }
        }

下一场在文书档案管理的功效模块里面,对文书档案的剧情开始展览加载和保留就能够,如下是文书档案体现的项目实效。

金沙注册送58 12

编写WO福特ExplorerD文书档案的分界面效果如下所示,大家能够见到,这一个控件里面突显的Word格式及内容都和WO卡宴D软件呈现的并一点差别也没有常,相当精确,而且速度也十分的快,比DevExpress的RichText艾德it控件的效应和速度要好很好多。

金沙注册送58 13

金沙注册送58 14

 

以上正是利用TX Text
Control进行WOMuranoD文书档案的编辑显示管理的实在总括,希望能够给您提供灵感和增加援救。

3、TX Text Control的使用

有了汉化,只是大家健康使用控件的率先步,我们供给在先后里面整合控件,那么就必要对它实行利用,以及对控件的性质、事件进展管理,本事获得最好的利用作用。

咱俩在VS工具栏里面参与相应的控件,能够看来有以下相关的控件对象可供使用,一般景色下咱们选择TextControl,然后在其基础上成立其他RulerBar、ButtonBar、StatusBar就能够,而1旦我们必要联合数据(很常用)就供给参与MailMerge控件对象。

金沙注册送58 15

增添控件后,大家可以对控件的相干基础的复制、粘贴、剪切等操作能够直接选用控件的API即可完结。

        private void menuEdit_Undo_Click(object sender, EventArgs e)
        {
            _textControl.Undo();
        }

        private void menuEdit_Redo_Click(object sender, EventArgs e)
        {
            _textControl.Redo();
        }

        private void menuEdit_Cut_Click(object sender, EventArgs e)
        {
            _textControl.Cut();
        }

里头查找、替换对话框也是足以透过API进行调出。

        private void menuEdit_Find_Click(object sender, EventArgs e)
        {
            _textControl.Find();
        }

        private void menuEdit_Replace_Click(object sender, EventArgs e)
        {
            _textControl.Replace();
        }

使用这个最基础的API是例行的操作。

而采用插入相关的对象,如图片、文本框等,就须求做一些简易的编码,方便把对象参预到TextControl对象里面。

        private void menuInsert_Image_Click(object sender, EventArgs e)
        {
            TXTextControl.Image imageNew = new TXTextControl.Image();
            _textControl.Images.Add(imageNew, TXTextControl.HorizontalAlignment.Left, -1, TXTextControl.ImageInsertionMode.DisplaceText);
        }
        private void menuInsert_TextFrame_Click(object sender, EventArgs e)
        {
            try
            {
                // Force Exception if standard version:
                _textControl.TextFrames.GetItem();
                Size sizeTextFrame = new Size(2268, 2268);   // 4 x 4 cm

                TXTextControl.TextFrame textFrameNew = new TXTextControl.TextFrame(sizeTextFrame);
                _textControl.TextFrames.Add(textFrameNew, TXTextControl.HorizontalAlignment.Left, -1, TXTextControl.TextFrameInsertionMode.DisplaceCompleteLines);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ProductName);
            }
        }

其一控件最广大的正是MailMerge进行合并数据的操作了,那一个也是我们应用它来处理很多模板化文档的目的。

MailMerge对象合并数据的操作,重假如接受集结对象可能是DataTable对象,所以大家务必将大家的数额转换为那种格式,不然合并数据得不到要的结果。

联合数据的处理格局,最开头就是亟需规划好模板,那一点很重视,模板的统一计划依旧沿用了例行Word文书档案域对象的定义,要求加上一些域来做持续数据替换的靶子占位符,如下是本人测试的1个模板。

金沙注册送58 16

其一里面根本是主从表整合的三个模板,大家须要绑定常规的主表记录,也亟需绑定明细表的集结记录,不过最后我们都供给把数据对象调换为汇集(如DataSet),然后才具绑定到文书档案对象上去。

在地点的文书档案里面,你知识看到了域对象,而从不观望2个藏匿的3个晤面记录的发端和终结的书签设置。关于书签的意义和如何操作,可以明白自己事先的小说作品《应用Aspose.Word控件达成Word文书档案的操作》、《选用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文书档案的模板化导出》

书签的效劳很关键,不然不可能正常解析会集的笔录并绑定在WO智跑D分界面上的,我们开采书签管理对话框,能够见到上述文档里面有三个职责,书签标志的初步和了结地点。

金沙注册送58 17

那般我们安排好模板后,第二步就是通过代码生成相关对象,然后和文书档案进行统1就足以了。

比如说小编创设三个主表和一个从表的笔录,统一把它们生成3个DataSet对象供役使。

        public static DataSet CreateDataSet()
        {
            DataSet ds = new DataSet();

            DataTable dtMain = DataTableHelper.CreateTable("Company,HandNo,Creator,CreateTime|DateTime");
            dtMain.TableName = "main";
            DataRow dr = dtMain.NewRow();
            dr["Company"] = "广州爱奇迪软件科技有限公司";
            dr["HandNo"] = "123456";
            dr["Creator"] = "伍华聪";
            dr["CreateTime"] = DateTime.Now;
            dtMain.Rows.Add(dr);

            DataTable dt = DataTableHelper.CreateTable("ID,ProductName,Description,Price|decimal,Quantity|int");
            dt.TableName = "ProductInfo";
            dr = dt.NewRow();
            dr["ID"] = "1";
            dr["ProductName"] = "海飞丝洗发水";
            dr["Description"] = "海飞丝洗发水, 550ml";
            dr["Price"] = 19.8M;
            dr["Quantity"] = 100;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = "2";
            dr["ProductName"] = "联想品牌电脑";
            dr["Description"] = "联想Y700-15ISK-ISE 旗舰版";
            dr["Price"] = 6500M;
            dr["Quantity"] = 10;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = "3";
            dr["ProductName"] = "IPhone7 128G";
            dr["Description"] = "苹果IPhone7, 128G";
            dr["Price"] = 5800M;
            dr["Quantity"] = 10;
            dt.Rows.Add(dr);

            ds.Tables.Add(dtMain);
            ds.Tables.Add(dt);
            return ds;
        }

先加载模板文书档案

if (setting == null)
{
    setting = new TXTextControl.LoadSettings();
    setting.ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord;
}
_textControl.Load(Application.StartupPath + "\\Template\\template1.docx", TXTextControl.StreamType.WordprocessingML, setting);

构成统1数据

DataSet ds = PurchaseInfoHelper.CreateDataSet();
mailMerge1.MergeBlocks(ds);
mailMerge1.Merge(ds.Tables["main"], true);

终极就能够看看我们所须求的结果了。

金沙注册送58 18

本来,倘诺很熟知Aspose.Word控件的采纳,大家实际上也得以选用Aspose.Word控件来做后台的数据整合管理,Aspose.Word控件援助广大变量定义,以及尤其复杂的拍卖,如本身把原本在框架模块里面包车型地铁人口新闻导出Word功能收收取来,这几个模块原先是接纳Aspose.Word来拍卖数量统一的,作者不改造在这之中的逻辑,只是把合并后的多寡突显在TX
Text Control就可以,如下代码所示。

var saveFile = StaffHelper.GenerateDoc();
//加载文档
_textControl.Load(saveFile, StreamType.MSWord);

最终就生成了我们伊始介绍的软件分界面效果。

金沙注册送58 19

本条控件近期利用起来还算不错,不过对于部分数据源的拍卖方面,以往希望持续扩张越多的接口,继续保险观看,希望能将钻探的硕果用在具体的系列上。

相关文章

网站地图xml地图