1 / 23

第 8 章 ActiveX 控件和自定义组件开发

第 8 章 ActiveX 控件和自定义组件开发. 王德俊 上海交通大学继续教育学院. 第 8 章 ActiveX 控件和自定义组件开发. 8.1 ActiveX 控件 8.2 自定义组件 . ActiveX 控件概念. 什么是 ActiveX 控件 ActiveX 是 Microsoft 对一系列策略性面向对象程序技术和工具的称呼,是“成品”的软件模块, 可以简单理解为能够实现特定功能的“成品”控件。 ActiveX 控件 是在 OLE 控件“对象链接与嵌入控件”和 OCX 控件的基础发展起来的,其重要作用是可以插入到网页或应用程序中使用。.

xiang
Download Presentation

第 8 章 ActiveX 控件和自定义组件开发

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第8章 ActiveX控件和自定义组件开发 王德俊 上海交通大学继续教育学院

  2. 第8章ActiveX控件和自定义组件开发 8.1 ActiveX控件 8.2 自定义组件

  3. ActiveX控件概念 • 什么是ActiveX控件 • ActiveX是Microsoft对一系列策略性面向对象程序技术和工具的称呼,是“成品”的软件模块,可以简单理解为能够实现特定功能的“成品”控件。 • ActiveX控件是在OLE控件“对象链接与嵌入控件”和OCX控件的基础发展起来的,其重要作用是可以插入到网页或应用程序中使用。

  4. 自定义组件概念 什么是自定义组件 严格来说,ActiveX控件指的是提供用户界面接口(UI)功能的组件,而一般所说的组件是无用户界面组件,此类组件定义时只需定义为宿主程序所调用的属性和方法,无需考虑如何显示界面。

  5. 开发和使用 • ActiveX控件通常以dll或ocx文件的形式存在,自定义无界面组件通常以dll的形式存在,它们不能独立运行,相应的依赖程序称为宿主程序。 • 宿主程序在使用控件和组件时,不需要编译,只需要按照既定的格式说明进行调用即可。 • 开发语言: • ActiveX控件可以用各种编程语言来开发,如C、C++,也包括.NET中的C#、VB.NET等。

  6. 自定义组件的创建步骤 (1) 选择“文件”|“新建”|“项目”命令,在打开的“新建项目”对话框的模板框中选择“类库”模版, 并设置组件名称,【确定】 (2) 在对应的类文件中,添加具有一定功能的public方法作为组件访问接口 (3) 选择“生成”|“生成组件名称”菜单命令,即可在程序根目录的“组件名称\bin\Release”或“组件名称\bin\Debug”子目录下生成以文件“组件名称.dll”存在的组件。

  7. 自定义组件的使用 (1)创建应用程序,如:窗体应用程序 (2)选择菜单“项目”|“添加引用”命令,在打开的“添加引用”对话框中打开“浏览”选项卡,定位到“组件名称.dll”文件所在的目录,选择该文件,【确定】,引入已创建的组件 (3)在应用程序中创建组件类的对象调用其接口方法。

  8. 【例8.1】开发具有对英文文本进行加密和解密功能的组件。【例8.1】开发具有对英文文本进行加密和解密功能的组件。 • 设计思想:这里假设英文文本是由大小写字母、逗号、点号和空格组成。加密的原理是,先将这些字符随机地排成一圈,为叙述方便,不妨假设排成如下的圈(□表示空格): • 令key表示密钥(这里为整数),对于英文文本(明文)中的每个字符,用其在圈中所在位置后面的第key个字符表示。 • 例如,如果key为4,则文本“I am a boy. ”加密后就变成密文“MdeqdedfsCc”。

  9. 【例8.1】(续) • 解密方法:只需将密文中的字符用其在圈中所在位置前面的第key字符来表示即可。 • 解密用户必须知道密钥key。

  10. 【例8.1】(续) 步骤如下: (1) “新建项目”, 选择“类库”,然后将项目名设置为EnDecrypting,单击【确定】按钮。 (2)命名空间采用默认设置EnDecrypting,而将类名改为EnDecryptingClass;然后在该类中添加一个私有成员: privatestring matrix = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,. ";

  11. 【例8.1】(续) (3)接着在EnDecryptingClass类中添加两个方法,分别用于实现加密和解密: public string Encrypting(string plaintext, int keycode) //加密 public string Decrypting(string ciphertext, int keycode) //解密

  12. 【例8.1】(续) 待加密文本 密钥 publicstring Encrypting(string plaintext, int keycode) //加密方法 { char[] chars = matrix.ToCharArray(); char[] ciphertext_arr = plaintext.ToCharArray(); //将明文散列到字符数组中 int i = 0, j = 0; for (i = 0; i < ciphertext_arr.Length; i++) { for (j = 0; j < chars.Length; j++) { if (matrix[j] == ciphertext_arr[i]) break; } if (j == matrix.Length) throw new Exception("明文中包含非法字符!"); int k = 0; while (k < keycode) { k++; j++; if (j == matrix.Length) j = 0; } ciphertext_arr[i] = matrix[j]; //明文转换为密文 } return new String(ciphertext_arr); //返回密文 }

  13. 【例8.1】(续) public string Decrypting(string ciphertext, int keycode) //解密方法 { char[] chars = matrix.ToCharArray(); char[] plaintext_arr = ciphertext.ToCharArray(); //将密文散列到字符数组中 int i = 0, j = 0; for (i = 0; i < plaintext_arr.Length; i++) { for (j = 0; j < chars.Length; j++) { if (matrix[j] == plaintext_arr[i]) break; } if (j == matrix.Length) throw new Exception("密文中包含非法字符!"); int k = keycode - 1; while (k >= 0) { k--; j--; if (j == -1) j = matrix.Length - 1; } plaintext_arr[i] = matrix[j]; //密文转换为明文 } return new String(plaintext_arr); } //返回明文 待解密文本 密钥

  14. 【例8.1】(续) (4)生成加密、解密组件:选择菜单“生成”|“生成EnDecrypting”命令,即可在程序根目录的EnDecrypting\bin\Release子目录下生成以文件EnDecrypting.dll存在的加密、解密组件。

  15. 【例8.2】(续) 【例8.2】调用在例8.1中创建的加密、解密组件EnDecrypting,实现对给定英文文本的加密和解密功能。 (1)创建名为testEnDecrypting的窗体应用程序,然后选择菜单“项目”|“添加引用”命令,在打开的“添加引用”对话框中打开“浏览”选项卡,定位到EnDecrypting.dll文件所在的目录,并选择该文件,【确定】按钮即可引入已创建的组件,以后就可以直接调用它了。

  16. 【例8.2】(续) (2)在窗体上分别添加三个TextBox控件和三个Label控件以及两个Button控件,并对它们的有关属性、位置和大小作适当的设置和调整,并将窗体的Text属性值设置为“加密、解密程序”,结果如下图所示。

  17. 【例8.2】(续) (3)制作用于输入密钥的对话框。方法是:在程序中再添加一个窗体,形成窗体Form2,并在该窗体上添加一个TextBox控件和一个Label控件,并作适当的调整和设置,结果如下图所示。

  18. 【例8.2】(续) (4)为了使窗体Form2中输入的数据能传递到Form1中,需要编写相关代码 : public partial class Form2 : Form { public Form2() { InitializeComponent(); } private int keycode = -1; public int keycodeValue //Form1利用该属性可以访问Form2中输入的数据 { get { return keycode; } } private void button1_Click(object sender, EventArgs e) { keycode = Convert.ToInt16(textBox1.Text); this.Close(); } }

  19. 【例8.2】(续) (5)编写相关事件的处理函数,需要做以下几项工作: 编写显示用于输入密钥的对话框的实现函数——ShowForm2Dia() 为【加密】和【解密】按钮编写事件处理函数 //显示用于输入密钥的对话框的实现代码 private int ShowForm2Dia() { Form2 frm2 = new Form2(); frm2.MaximizeBox = false; frm2.MinimizeBox = false; frm2.FormBorderStyle = FormBorderStyle.FixedSingle; frm2.Text = "密钥"; frm2.ShowDialog(); return frm2.keycodeValue; }

  20. 【例8.2】(续) //【加密】按钮事件处理函数 private void button1_Click(object sender, EventArgs e) { int keycode = ShowForm2Dia(); try { EnDecrypting.EnDecryptingClass obj = newEnDecrypting.EnDecryptingClass(); textBox2.Text = obj.Encrypting(textBox1.Text, keycode); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }

  21. 【例8.2】(续) //【解密】按钮事件处理函数 private void button2_Click(object sender, EventArgs e) { int keycode = ShowForm2Dia(); try { EnDecrypting.EnDecryptingClass obj = new EnDecrypting.EnDecryptingClass(); textBox3.Text = obj.Decrypting(textBox2.Text, keycode); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }

  22. 【例8.2】(续) • 执行该程序:

  23. 本讲小结 ActiveX控件 自定义组件

More Related