zoukankan      html  css  js  c++  java
  • C#_Assembly-Reflection_程序集与反射 练习<二> 记事本插件编写

    //续上  上篇我们编写了在格式中动态加载dll文件  获取其中的类型  然后找到我们定义的接口类型

    为该接口类型赋值  然后将对象保存在 ToolMenuStripItem 的Tag中   为该item单击事件注册函数

    将tag中的对象传递过去   实现接口中定义的方法   (其实就实现了将文本转为大写。。)

    Today,We'll...  好了,今天我们接着做   首先 我们打开之前的工程    为其添加 和转换大写 一样的 转换小写 :)

    首先,我们要明确 转换小写 转换大写  所用的接口定义是一样的,这里我们先回顾下之前定义的接口类型:

    //------------------------定义插件的接口规范-------------

     1 namespace MyNotepadInterface
     2 {
     3     public interface IEditor
     4     {
     5         //定义一个只读属性   表示插件的名称
     6          string PluginName
     7         {
     8             get;
     9         }
    10 
    11         //运行该插件的方法
    12         void Run(TextBox txtBox);
    13     }
    14 
    15 }

    我们可以看出其(IEditor)有 只读属性 PluginName  以及 Run方法 ,也就是说 我们无论今后写多少个插件,插件的名称  我们就用PluginName

    来保存,调用Run方法来执行 该插件 

    //----------------------转换小写---------------------

    新建类库  定义实现IEditor类型:

    jiangzi:

      同样记得引用该接口类型哈

    定义ToLower类型:

     1 namespace MyDll.ToLower
     2 {
     3     public class ToLower : IEditor
     4     {
     5         public string PluginName
     6         {
     7             get { return "转成小写"; }
     8         }
     9 
    10         public void Run(System.Windows.Forms.TextBox txtBox)
    11         {
    12             txtBox.Text = txtBox.Text.ToLower();
    13         }
    14     }
    15 }

    和ToUpper一样  ~  接下来要做的就是 清理  重新生成该类库   找到dl文件 复制到Plugins文件夹下

    下面我们来添加改变文本字体的插件   :

    首先 我们添加类库  定义其实现IEditor的类型:

    在修改字体中我们需要弹出 修改字体的对话框  这个对话框我们就做在 该类库中

     1 namespace MyDll.ChangeFont
     2 {
     3     public class ChangeFont:MyNotepadInterface.IEditor
     4     {
     5 
     6         public string PluginName
     7         {
     8             get { return "修改字体"; }
     9         }
    10 
    11         public void Run(System.Windows.Forms.TextBox txtBox)
    12         {
    13             changeFontForm cff = new changeFontForm(txtBox);
    14             cff.Show();
    15         }
    16     }
    17 }

    这里定义的changFontForm就是要弹出的修改字体的窗体:

    因为这里的构造函数 

    new changeFontForm(txtBox)   传递了TextBox类型   所以在changeFontForm需要定义该构造函数

     1   public partial class changeFontForm : Form
     2     {
     3         private TextBox txtBox;
     4 
     5         public changeFontForm()
     6         {
     7             InitializeComponent();
     8         }
     9 
    10         public changeFontForm(TextBox txtBox)      //定义有参数的构造函数
    11             :this()
    12         {
    13             // TODO: Complete member initialization
    14             this.txtBox = txtBox;              //将通过实现接口类型的子对象 ( public class ChangeFont:MyNotepadInterface.IEditor) 中传递的参数 保存
    15         }
    16 
    17         private void button1_Click(object sender, EventArgs e)
    18         {
    19             this.txtBox.Font = new Font(comboBox1.Text, float.Parse(comboBox2.Text));
    20             this.Close();
    21         }
    22 
    23     }

    好了  清理重新生成  移动dll文件位置 至 Plugins文件夹下:

    噢了~

  • 相关阅读:
    函数
    流程控制
    条件判断
    运算符
    shell中的变量
    ubuntu终端命令启动matlab方法
    tensorflow/core/kernels/conv_ops.cc:659] check failed: stream->parent()->getc
    ImportError: libcudnn.so.5: cannot open shared object file: No such file or directory
    ubuntu 中文变成小方框 口
    ubuntu安装matplotlib一些坑
  • 原文地址:https://www.cnblogs.com/siyi/p/5012041.html
Copyright © 2011-2022 走看看