Upload
xiang
View
100
Download
2
Embed Size (px)
DESCRIPTION
第 8 章 ActiveX 控件和自定义组件开发. 王德俊 上海交通大学继续教育学院. 第 8 章 ActiveX 控件和自定义组件开发. 8.1 ActiveX 控件 8.2 自定义组件. ActiveX 控件概念. 什么是 ActiveX 控件 ActiveX 是 Microsoft 对一系列策略性面向对象程序技术和工具的称呼,是“成品”的软件模块, 可以简单理解为能够实现特定功能的“成品”控件。 ActiveX 控件 是在 OLE 控件“对象链接与嵌入控件”和 OCX 控件的基础发展起来的,其重要作用是可以插入到网页或应用程序中使用。. - PowerPoint PPT Presentation
Citation preview
第第 88 章 章 ActiveXActiveX 控件和自定义组件开发控件和自定义组件开发
王德俊
上海交通大学继续教育学院
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
第 8 章 ActiveX 控件和自定义组件开发
8.1 ActiveX 控件
8.2 自定义组件
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
ActiveX 控件概念
什么是 ActiveX 控件
ActiveX 是 Microsoft 对一系列策略性面向对象程序技术和工具的称呼,是“成品”的软件模块,可以简单理解为能够实现特定功能的“成品”控件。
ActiveX 控件是在 OLE 控件“对象链接与嵌入控件”和 OCX 控件的基础发展起来的,其重要作用是可以插入到网页或应用程序中使用。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
自定义组件概念 自定义组件概念
什么是自定义组件
严格来说, ActiveX 控件指的是提供用户界面接口( UI )功能的组件,而一般所说的组件是无用户界面组件,此类组件定义时只需定义为宿主程序所调用的属性和方法,无需考虑如何显示界面。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
ActiveX 控件通常以 dll 或 ocx 文件的形式存在,自定义无界面组件通常以 dll 的形式存在,它们不能独立运行,相应的依赖程序称为宿主程序。
宿主程序在使用控件和组件时,不需要编译,只需要按照既定的格式说明进行调用即可。
开发语言:ActiveX 控件可以用各种编程语言来开发,如 C 、 C++ ,也包括 .NET中的 C #、 VB.NET 等。
开发和使用
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
自定义组件的创建步骤自定义组件的创建步骤(1) 选择“文件” |“ 新建” |“ 项目”命令,在打开的“新建项目”对话框的模板框中选择“类库”模版, 并设置组件名称,【确定】
(2) 在对应的类文件中,添加具有一定功能的 public 方法作为组件访问接口
(3) 选择“生成” |“ 生成组件名称”菜单命令,即可在程序根目录的“组件名称 \bin\Release” 或“组件名称 \bin\Debug” 子目录下生成以文件“组件名称 .dll” 存在的组件。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
自定义组件的使用自定义组件的使用( 1 )创建应用程序,如:窗体应用程序
( 2 )选择菜单“项目” |“ 添加引用”命令,在打开的“添加引用”对话框中打开“浏览”选项卡,定位到“组件名称 .dll” 文件所在的目录,选择该文件,【确定】,引入已创建的组件
( 3 )在应用程序中创建组件类的对象调用其接口方法。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.1 】 开发具有对英文文本进行加密和解密功能的组件。
设计思想:这里假设英文文本是由大小写字母、逗号、点号和空格组成。加密的原理是,先将这些字符随机地排成一圈,为叙述方便,不妨假设排成如下的圈(□表示空格):
令 key 表示密钥(这里为整数),对于英文文本(明文)中的每个字符,用其在圈中所在位置后面的第 key 个字符表示。
例如,如果 key 为 4 ,则文本“ I am a boy. ” 加密后就变成密文“ MdeqdedfsCc” 。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
解密方法:只需将密文中的字符用其在圈中所在位置前面的第 key 字符来表示即可。
解密用户必须知道密钥 key 。
【例 8.1 】 ( 续 )
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.1 】 ( 续 )
步骤如下:
( 1 ) “新建项目” , 选择“类库”,然后将项目名设置为 EnDecrypting ,单击【确定】按钮。
( 2 )命名空间采用默认设置 EnDecrypting ,而将类名改为EnDecryptingClass ;然后在该类中添加一个私有成员:
private string matrix =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,. ";
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.1 】 ( 续 )
( 3 )接着在 EnDecryptingClass 类中添加两个方法,分别用于实现加密和解密:
public string Encrypting(string plaintext, int keycode)
// 加密
public string Decrypting(string ciphertext, int keycode)
// 解密
应用软件开发( 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); //返回密文 }
待加密文本 密钥
应用软件开发( 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); } //返回明文
密钥待解密文本
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.1 】 ( 续 )
( 4 )生成加密、解密组件:选择菜单“生成” |“ 生成EnDecrypting” 命令,即可在程序根目录的 EnDecrypting\bin\Release 子目录下生成以文件 EnDecrypting.dll 存在的加密、解密组件。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.2 】 ( 续 )
【例 8.2 】 调用在例 8.1 中创建的加密、解密组件EnDecrypting ,实现对给定英文文本的加密和解密功能。
( 1 )创建名为 testEnDecrypting 的窗体应用程序,然后选择菜单“项目” |“ 添加引用”命令,在打开的“添加引用”对话框中打开“浏览”选项卡,定位到 EnDecrypting.dll 文件所在的目录,并选择该文件,【确定】按钮即可引入已创建的组件,以后就可以直接调用它了。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.2 】 ( 续 )
( 2 )在窗体上分别添加三个 TextBox 控件和三个 Label 控件以及两个 Button 控件,并对它们的有关属性、位置和大小作适当的设置和调整,并将窗体的 Text 属性值设置为“加密、解密程序”,结果如下图所示。
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.2 】 ( 续 )
( 3 )制作用于输入密钥的对话框。方法是:在程序中再添加一个窗体,形成窗体 Form2 ,并在该窗体上添加一个 TextBox控件和一个 Label 控件,并作适当的调整和设置,结果如下图所示。
应用软件开发( 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(); } }
应用软件开发( 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; }
应用软件开发( 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()); } }
应用软件开发( 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()); } }
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
【例 8.2 】 ( 续 )
执行该程序:
应用软件开发( C# ) 第 8 章 Active 控件和自定义组建开发
本讲小结
ActiveX 控件
自定义组件