动态创建控件技术在程序开发中的应用

时间:2022-02-27 11:56:48

动态创建控件技术在程序开发中的应用

摘要:在程序开发项目中,数据的录入和显示是一个最基本的功能。开发特定模式的数据录入和显示在整个项目中随处可见,其开发难度也是很简单的,但这种方法适应性差,当客户的数据需求发生变化时,程序开发人员需要修改相应窗体的界面,修改源代码并重新编译,使程序维护的工作量增大。该文通过动态创建控件技术,实现了动态的数据采集和显示,提高了程序的适应性。

关键词:XML;TabControl;TabPages;控件

中图分类号:TP311文献标识码:A文章编号:1009-3044(2010)17-4709-02

The Application of Dynamic Control Components Creating Technology in Programming

YAN He

(Handan School of Agriculture, Handan 056001, China)

Abstract: In the project of programming, it is a basic function to input data and display data. The development of a specific mode for data entry and display can be seen everywhere in the whole project. The difficulty of its development is also very simple. However, this method has poor adaptability. When a customer's needs for the data changed, developers need to amend the corresponding form interface, modify the source code to compile and release again. This increased the workload of programs' maintenance. In this paper, through a dynamic control components creating technology, we achieved the dynamic data entry and display, increased the adaptability of the program.

Key words: XML; TabControl; TabPages; control component

在实际程序开发项目中,如何不修改源代码即可满足用户的使用要求变化是每个程序开发人员奋斗的目标。从实际开发的角度看待此问题:用户需求变化可能涉及到整个体系的变化、数据库结构的变化和窗体交互形式的变化,不修改源代码来满足各种变化在实际开发中是不现实的也是不可行的。因此开发过程中最少代码修改是系统分析人员和代码编写人员要考虑的,这直接反映程序投入实际应用中的灵活性和适应性,是衡量一个系统运行好坏的重要依据。任何一个系统都离不开数据的录入和显示,数据信息收集在应用程序的各个功能中都可能涉及到,它是系统最基础的部分。如果能开发一个通用模块,建立录入信息的配置文件,在窗体中动态创建各种控件来代替固定模式输入,势必会极大地提高应用程序灵活性和适应性。这样程序投入实际运行后,可实时地根据客户要求修改录入信息的配置文件,在窗体中动态创建交互控件,灵活地接收和显示用户录入信息,在不修改程序源代码情况下,最大限度提高程序适应性。本文以C#.Net开发代码为例说明。

1 实现原理分析

1.1 结构示意图

动态创建控件技术的实现原理如图1所示。

1.2 控件配置文件(XML)组成

XML是Extensible Markup Language的缩写,即可扩展标记语言是一种可以用来创建自己的标记的标记语言。是一门既无标签集也无语法的新一代标记语言,XML是被设计用来描述数据的,重点是:什么是数据,如何存放数据。利用XML的数据存储特性,将控件相关信息存储在XML格式的文件中,方便数据维护。

图1中的功能模块是应用程序实现的各个功能项。

配置文件XML文件1的功能:记录每个需要录入数据的模块和交互界面中可能需要的TabPages页, 由于在创建控件的窗体中不能确定生成交互控件的数量,因此将控件根据需要放置在不同的TabPages页中,TabPages页作为生成控件的父容器。

例如,表1所示的程序模块构成, 其数据结构可用XML文件表示为:

model_1

用户信息

model_2

产品基本信息

model_2

产品技术规格

配置文件XML文件2的功能:记录XML文件1中的某模块中TabPages下需要创建的控件及相关属性。

例如,表2所示的模块model_1的控件构成,其数据结构可用XML文件表示为:

model_1

用户姓名

textbox1

TextBox

single

model_1

用户姓名

combobox1

ComboBox

男;女

“提示信息”是要创建交互控件的提示信息,是Label类的控件。“控件名称”是要创建控件在窗体中的唯一标识。“控件类型”是创建控件的类型,如TextBox、ComBoBox、RadioButton等Visual C#下的各种控件。“控件格式”是特定类型控件的呈现形式,如TextBox控件有单行输入和多行输入形式。“控件值”是创建控件的默认值,对于ComBoBox、RadioButton和ListBox类的控件值,可用分号“;”将不同值分开绑定到控件中,如果控件需从数据库中绑定数据也可在此处指明数据的表名称。“所属页”是配置文件XML文件2中的值。

2 设计说明

2.1 控件呈现

程序运行某功能模块时,首先根据模块的编号,从配置文件1中获取要创建的TabPages信息,建立字符型数组page保存TabPages的显示名称。通过循环在控件呈现窗体的tabControl中添加TabPage页,代码如下:

for (int i=0;i

{TabPage tab=new TabPage (page[i]);

tabControl1.TabPages.Add(tab); }

从配置文件2中获取要创建的交互控件的信息,建立字符型数组prompt、control、inpage、controltype、controlformat、controlvalue分别保存控件的提示信息、控件的ID、控件所属的TabPages、控件类型、控件格式和控件值,这些数组的维数相同,存储顺序分别对应一个控件的各种属性。通过循环从上述数组中获取信息建立各种控件,如:

1)提示信息创建:

Label label=new Label ();

label.Text =prompt[i];

2)交互控件创建:

if (controltype[i]=="TextBox"){

TextBox t = newTextBox ();

if (controlformat[i]=="single")

t.Multiline = false;

else t.Multiline =true;

t.Parent =tabControl1.TabPages [pagenumber];}=

else if (controltype[i]=="ComboBox") {

ComboBox t = newComboBox ();

string[] items=controlvalue[i].Split (';');

for (int j=0;j

t.Items.Add (items[j]);

t.Parent =tabControl1.TabPages [pagenumber];}

注意:生成的控件一定要指明该控件的Parent属性,即控件的父控件信息,否则会引发错误。控件的坐标位置可根据实际需要编写,此处省略。

2.2 控件输入信息的保存

根据2.1中保存控件信息数组的维数,建立字符型数组values,通过循环保存对应控件的输入值,循环次数是values的个数,即某个功能模块需要的交互控件的总数量。对于某控件要根据该控件的父容器TabPages循环遍历找到控件的值。代码如下:

for (int i=0;i

pagenumber=Convert.ToInt16 (inpage[i]);

for (int j=0;j

if (tabControl1.TabPages[pagenumber].Controls[j].Name==control[i] ){

if (controltype[i]=="TextBox")

values[i] =((TextBox)tabControl1.TabPages [pagenumber].Controls [j]).Text ;

else if (controltype[i]=="ComboBox")

values[i] =((ComboBox)tabControl1.TabPages [pagenumber].Controls [j]).SelectedItem.ToString ();}}}

3 结论

在软件项目开发中,为需要交互数据的功能模块建立控件信息配置文件,编写通用的控件生成和数据获取函数,可大大减少代码编写工作量,使程序代码结构清晰、思路简洁和便于维护。如果交互信息发生变化,则只需对配置文件进行简单的管理维护(如增加、删除控件信息或根据交互内容修改控件的格式等),无须修改程序源代码,即可满足变化的要求,做到以不变应万变,提高程序的适应性。

参考文献:

[1] 周绪,韦文斌.SQL Server应用与提高[M].北京:清华大学出版社,2000.

[2] 桂思强与数据库程序设计[M].北京:中国铁道出版社,2002.

[3] 郝刚,袁勇刚服务器控件开发技术与实例[M].北京:人民邮电出版社,2005.

[4] 微软公司安全应用程序开发[M].北京:清华大学出版社,2003.

[5] MSDN Library Visual C#文档[EB/OL]./china/MSDN/library/Mobility/default.mspx.

上一篇:自动播放且配音同步的多媒体演示课件设计与制... 下一篇:探讨操作系统实验课程现状与改进