C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎(下)

主窗体中还定义了诸如Function_New,Function_Open,Function_Save等等函数用于实现 对文档的新建、打开文件和保存文件等处理。而工具条上的按钮就是调用这些功能函数。定 义这些功能函数的代码如下

/// <summary>
/// 执行新建文档
/// </summary>
public bool Function_New()
{
     if (QuerySave())
    {
        txtEditor.Text = "";
        txtEditor.Modified = false;
        strFileName  = null;
        return true;
    }
    return  false;
}

/// <summary>
/// 执行打开文件操作
/// </summary>
public bool Function_Open()
{
    if  (QuerySave() == false)
    {
        return false  ;
    }
    using (OpenFileDialog dlg = new  OpenFileDialog())
    {
        dlg.Filter = "文本文件 (*.txt)|*.txt|所有文件|*.*";
        dlg.CheckPathExists =  true;
       if (dlg.ShowDialog(this) == DialogResult.OK)
         {
            System.IO.StreamReader reader =  new System.IO.StreamReader(
                dlg.FileName,  System.Text.Encoding.GetEncoding("gb2312"));
             txtEditor.Text = reader.ReadToEnd();
            reader.Close ();
            strFileName = dlg.FileName;
             txtEditor.Modified = false;
            return  true;
        }
    }
    return false;
}

/// <summary>
/// 执行保存文档操作
///  </summary>
/// <returns>操作是否成功</returns>
public bool Function_Save()
{
    if (strFileName == null)
    {
        using (SaveFileDialog dlg = new  SaveFileDialog())
        {
            dlg.Filter  = "文本文件(*.txt)|*.txt|所有文件|*.*";
             dlg.CheckPathExists = true;
            dlg.OverwritePrompt =  true;
            if (dlg.ShowDialog(this) ==  DialogResult.OK)
            {
                 strFileName = dlg.FileName;
            }
             else
            {
                 return false;
            }
        }
    }
    System.IO.StreamWriter writer = new  System.IO.StreamWriter(
        strFileName, false,  System.Text.Encoding.GetEncoding( "gb2312" ));
    writer.Write (this.txtEditor.Text);
    writer.Close();
     this.txtEditor.Modified = false;
    return true;
}

/// <summary>
/// 执行另存为操作
/// </summary>
public bool Function_SaveAs()
{
    using (SaveFileDialog dlg  = new SaveFileDialog())
    {
        dlg.Filter = " 文本文件(*.txt)|*.txt|所有文件|*.*";
        dlg.CheckPathExists =  true;
        dlg.OverwritePrompt = true;
         if (dlg.ShowDialog(this) == DialogResult.OK)
        {
             strFileName = dlg.FileName;
             System.IO.StreamWriter writer = new System.IO.StreamWriter(
                 strFileName, false, System.Text.Encoding.GetEncoding ("gb2312"));
            writer.Write(this.txtEditor.Text);
            writer.Close();
             this.txtEditor.Modified = false;
            return true;
        }
    }
    return false;
}

/// <summary>
/// 执行全选操作
/// </summary>
public void Function_SelectAll()
{
    txtEditor.SelectAll ();
}

/// <summary>
/// 执行剪切操作
///  </summary>
public void Function_Cut()
{
     txtEditor.Cut();
}

/// <summary>
/// 执行复制操作
/// </summary>
public void Function_Copy()
{
     txtEditor.Copy();
}

/// <summary>
/// 执行粘帖操作
/// </summary>
public void Function_Paste()
{
     txtEditor.Paste();
}
/// <summary>
/// 执行删除操作
/// </summary>
public void Function_Delete()
{
     txtEditor.SelectedText = "";
}

时间: 2024-11-04 19:00:29

C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎(下)的相关文章

C#发现之旅第十四讲 基于动态编译的VB.NET脚本引擎(上)

脚本的原理 脚本,也可称为宏,是一种应用系统二次开发的技术,它能在应用系 统提供的一个容器环境中运行某种编程语言,这种编程语言代码调用应用系统提供的编程接 口,使得应用系统暂时"灵魂附体",无需用户干预作而执行一些自动的操作, 此时应用系统称为"宿主". 脚本也采用多种编程语言,比如JavaScript 语言,VBScript语言或者其他的,若采用VB则称为VB脚本. 下图为脚本原理图 下图为常 规编程开发软件的原理图

C#发现之旅第十二讲 基于反射和动态编译的快速ORM框架(下)

对于字符串类型的属性,其默认值就是"DBNull".而对于其他的整数或者日 期类型的属性,并没有默认值,因此是无条件的插入到数据库中. 我们使用以下的代 码来生成上述代码文本 myWriter.WriteLine("public override int FillInsertCommand( System.Data.IDbCommand cmd , object objRecord )"); myWriter.BeginGroup("{"); m

JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制

JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是class对象 我们在上节验证了同步函数的锁是this,但是对于静态同步函数,你又知道多少呢? 我们做一个这样的小实验,我们给show方法加上static关键字去修饰 private static synchronized void show() { if (tick > 0) { try { Thread

Sql Server之旅——第十四站 深入的探讨锁机制

原文:Sql Server之旅--第十四站 深入的探讨锁机制 上一篇我只是做了一个堆表让大家初步的认识到锁的痉挛状态,但是在现实世界上并没有这么简单的事情,起码我的表不会没有索引对吧,,,还 有就是我的表一定会有很多的连接过来,10:1的读写,很多码农可能都会遇到类似神乎其神的死锁,卡住,读不出来,插不进入等等神仙的事情导致性 能低下,这篇我们一起来探讨下.   一: 当select遇到性能低下的update会怎么样? 1. 还是使用原始的person表,插入6条数据,由于是4000字节,所以两

Henry的VB.NET之旅(十四)—动态关联事件与处理程序

程序|动态 Henry的VB.NET之旅(十四)-动态关联事件与处理程序 韩睿 "要解释新的事件处理程序的方法,我们需要先说几个重要的问题."大李开始严肃起来,我也只得挪动一下身子,表现出正襟危坐的架势. "我们首先讨论一下事件是怎么产生的.事件是对象发送的消息,以发信号通知操作的发生.操作可能是由用户交互,例如鼠标单击引起的,也可能是由某些其他的程序逻辑触发的.引发事件的对象叫做事件发送方(啊,听到这,Henry突然明白了事件处理程序中的第一个参量为什么叫Sender了,就

C#发现之旅第十讲 文档对象模型

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 课程说明 本

在ASP.NET 2.0中操作数据之七十四:用Managed Code创建存储过程和用户自定义函数(下部分)_自学过程

第八步:从表现层调用Managed Stored Procedures 当对数据访问层和业务逻辑层进行扩充以支持调用GetDiscontinuedProducts 和 GetProductsWithPriceLessThan这2种managed stored procedures后,我们可以在一个ASP.NET页面里展示这些存储过程的结果了. 打开AdvancedDAL文件夹里的ManagedFunctionsAndSprocs.aspx页面,从工具箱拖一个GridView控件到设计器,设其ID

linux网络编程之socket(十四) 基于UDP协议的网络程序

一.下图是典型的UDP客户端/服务器通讯过程 下面依照通信流程,我们来实现一个UDP回射客户/服务器 #include <sys/types.h> #include <sys/socket.h>  ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struc

C#发现之旅第四讲 Windows图形开发入门

为了让大家更深入的了解和使用C#,我们将开始这一系列的主题为"C#发现之旅 "的技术讲座.考虑到各位大多是进行WEB数据库开发的,而所谓发现就是发现我们所 不熟悉的领域,因此本系列讲座内容将是C#在WEB数据库开发以外的应用.目前规划的主要内 容是图形开发和XML开发,并计划编排了多个课程.在未来的C#发现之旅中,我们按照由浅入 深,循序渐进的步骤,一起探索和发现C#的其他未知的领域,更深入的理解和掌握使用C#进 行软件开发,拓宽我们的视野,增强我们的软件开发综合能力. 本次课程说明