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

23
8 8 ActiveX ActiveX 第第第第第第第第第第 第第第第第第第第第第 王王王 王王王王王王王王王王王王

Upload: xiang

Post on 01-Feb-2016

90 views

Category:

Documents


2 download

DESCRIPTION

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

TRANSCRIPT

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

第第 88 章 章 ActiveXActiveX 控件和自定义组件开发控件和自定义组件开发

王德俊

上海交通大学继续教育学院

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

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

8.1 ActiveX 控件

8.2 自定义组件

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

ActiveX 控件概念

什么是 ActiveX 控件

ActiveX 是 Microsoft 对一系列策略性面向对象程序技术和工具的称呼,是“成品”的软件模块,可以简单理解为能够实现特定功能的“成品”控件。

ActiveX 控件是在 OLE 控件“对象链接与嵌入控件”和 OCX 控件的基础发展起来的,其重要作用是可以插入到网页或应用程序中使用。

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

自定义组件概念 自定义组件概念

什么是自定义组件

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

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

ActiveX 控件通常以 dll 或 ocx 文件的形式存在,自定义无界面组件通常以 dll 的形式存在,它们不能独立运行,相应的依赖程序称为宿主程序。

宿主程序在使用控件和组件时,不需要编译,只需要按照既定的格式说明进行调用即可。

开发语言:ActiveX 控件可以用各种编程语言来开发,如 C 、 C++ ,也包括 .NET中的 C #、 VB.NET 等。

开发和使用

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

自定义组件的创建步骤自定义组件的创建步骤(1) 选择“文件” |“ 新建” |“ 项目”命令,在打开的“新建项目”对话框的模板框中选择“类库”模版, 并设置组件名称,【确定】

(2) 在对应的类文件中,添加具有一定功能的 public 方法作为组件访问接口

(3) 选择“生成” |“ 生成组件名称”菜单命令,即可在程序根目录的“组件名称 \bin\Release” 或“组件名称 \bin\Debug” 子目录下生成以文件“组件名称 .dll” 存在的组件。

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

自定义组件的使用自定义组件的使用( 1 )创建应用程序,如:窗体应用程序

( 2 )选择菜单“项目” |“ 添加引用”命令,在打开的“添加引用”对话框中打开“浏览”选项卡,定位到“组件名称 .dll” 文件所在的目录,选择该文件,【确定】,引入已创建的组件

( 3 )在应用程序中创建组件类的对象调用其接口方法。

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.1 】 开发具有对英文文本进行加密和解密功能的组件。

设计思想:这里假设英文文本是由大小写字母、逗号、点号和空格组成。加密的原理是,先将这些字符随机地排成一圈,为叙述方便,不妨假设排成如下的圈(□表示空格):

令 key 表示密钥(这里为整数),对于英文文本(明文)中的每个字符,用其在圈中所在位置后面的第 key 个字符表示。

例如,如果 key 为 4 ,则文本“ I am a boy. ” 加密后就变成密文“ MdeqdedfsCc” 。

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

解密方法:只需将密文中的字符用其在圈中所在位置前面的第 key 字符来表示即可。

解密用户必须知道密钥 key 。

【例 8.1 】 ( 续 )

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.1 】 ( 续 )

步骤如下:

( 1 ) “新建项目” , 选择“类库”,然后将项目名设置为 EnDecrypting ,单击【确定】按钮。

( 2 )命名空间采用默认设置 EnDecrypting ,而将类名改为EnDecryptingClass ;然后在该类中添加一个私有成员:

private string matrix =

"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,. ";

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.1 】 ( 续 )

( 3 )接着在 EnDecryptingClass 类中添加两个方法,分别用于实现加密和解密:

public string Encrypting(string plaintext, int keycode)

// 加密

public string Decrypting(string ciphertext, int keycode)

// 解密

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.1 】 ( 续 ) public string 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); //返回密文 }

待加密文本 密钥

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 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); } //返回明文

密钥待解密文本

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.1 】 ( 续 )

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

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.2 】 ( 续 )

【例 8.2 】 调用在例 8.1 中创建的加密、解密组件EnDecrypting ,实现对给定英文文本的加密和解密功能。

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

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.2 】 ( 续 )

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

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.2 】 ( 续 )

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

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 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(); } }

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 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; }

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.2 】 ( 续 )// 【加密】按钮事件处理函数 private void button1_Click(object sender, EventArgs e)

{ int keycode = ShowForm2Dia(); try { EnDecrypting.EnDecryptingClass obj = new EnDecrypting.EnDecryptingClass(); textBox2.Text = obj.Encrypting(textBox1.Text, keycode); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 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()); } }

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

【例 8.2 】 ( 续 )

执行该程序:

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

应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发

本讲小结

ActiveX 控件

自定义组件