




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C#.NET中动态添加与删除控件数组为共享公用功能的一组控件一起工作提供了便捷的途径。例如,一组控件可能用于显示相关的数据,或者在被点击时提供相关的行为。C#本身并不支持控件数组的建立,但是你可以通过编程复制控件数组的所有功能。本文介绍复制控件数组功能的简单组件的建立。控件数组的主要用处有:1 ,使用相同的名称与索引访问一组控件,允许用编号检索和设置数据项并且在整个数组中重复。这个功能可以使用下面的代码实现。伪代码myControlmyIndex.MyProperty=myValue;myControlmyIndex+1.MyMethod2,多个对象使用同一个事件处理程序(eventhandl
2、er)处理事件,在这些事件中检索和使用索引,代码如下:伪代码privatevoidmyControl_Click(System.Objectsender,System.EventArgse)Messagebox.Show("YouhaveclickedMyControlnumber"+myControl.Index);3,在运行时动态添加或者删除控件,代码如下:伪代码for(inti=1;i<6;i+)/插入代码来建立控件并给属性赋值C#允许你复制与控件数组相关的一些功能。例如,你能使用委托把多个对象的事件绑定到一个事件处理程序。但是,如果把这些功能合并到一个动态的、
3、容易管理的组件中更加简便。本文将建立有下面特性的组件: 建立索引和排序控件的集合。将使用按钮集合来演示。 一个事件处理程序来处理衍生的按钮的点击事件。 使用索引引用控件和成员的代码。 给窗体动态添加和删除控件的代码。建立项目在本节中将建立并命名一个项目,并给该项目添加一个类。该类将封装实现控件数组的代码。1、选择File->New->Project菜单打开NewProject对话框。2、从VisualC#项目列表中选择WindowsApplication项目模版,在Name框中输入ButtonArrayProject。3、选择File->SaveAll保存项目。实现一个集合B
4、uttonArray类会处理通过一个集合的实现来保存和组织控件数组的事务。集合是包含索引对象变量列表的对象,也包含add、remove等方法和其它的操作对象。本节中将建立一个继承自System.Collections.CollectionBase(.NET框架组件中提供必要的集合功能的类)的类,并实现提供必要功能的方法。建立继承类的过程:1、从Project菜单中选择AddClass。2、根据情况把类命名为ButtonArray.cs。类的代码编辑器将打开。3、在类的声明中,指定它继承自.NET框架组件的System.Collections.CollectionBase类。publicclas
5、sButtonArray:System.Collections.CollectionBase/省略了设计者增加的代码System.Collections.CollectionBase类为集合提供了很多必要的功能。其中包括一个跟踪集合中对象的List对象,维护集合中当前对象数量的Count属性,允许删除特定位置索引的对象的RemoveAt方法。在实现控件数组集合时会使用到它们。因为每个控件数组与一个窗体关联,索引必须添加一个字段来保存该窗体的引用。通过建立私有的、只读字段来保存引用,可以保证每个控件数组组件只与以一个窗体关联。为组件建立私有、只读字段立即给类声明添加下面的代码:privatere
6、adonlySystem.Windows.Forms.FormHostForm;在集合中实现的第一个方法是AddNewButton。该方法建立一个新的按钮控件并把它添加到目标窗体。你也可以使用该方法为新按钮设置初始属性。实现AddNewButton方法在ButtonArray类的代码编辑器中输入下面的代码:publicSystem.Windows.Forms.ButtonAddNewButton。/为Button类建立新的实例System.Windows.Forms.ButtonaButton=newSystem.Windows.Forms.Button。;/将该按钮添加到集合的内部列表thi
7、s.List.Add(aButton);/把控件集合中的按钮添加到被HostForm字段引用的窗体HostForm.Controls.Add(aButton);/设置该按钮对象的初始属性aButton.Top=Count*25;aButton.Left=100;aButton.Tag=this.Count;aButton.Text="Button"+this.Count.ToString();returnaButton;上面的方法的功能是:1、建立一个新按钮。2、把它添加到内部列表和HostForm引用的窗体的控件集合。3、设置初始属性,包括设置Tag属性来索引该按钮。你可
8、以在这一段中添加代码为控件设置更多的属性。4、返回新按钮,这样它就能立即被修改并指定给其它的对象引用。你必须建立一个构造函数(组件被初始化时运行的方法),当控件数组类的一个新实例被建立时,它用来设置HostForm字段的值并把新按钮添加到窗体。可以使用下面的方式达到这个目的。建立构造函数为类建立构造函数。/使用下面的构造函数代替默认的构造函数publicButtonArray(System.Windows.Forms.Formhost)HostForm=host;this.AddNewButton();构造函数需要一个参数,即放置按钮数组的窗体。它把该值指定给HostForm字段,接着类的Ad
9、dNewButton方法给窗体添加一个新按钮。暴露控件数组现在已经建立了建立和跟踪数组中控件的途径,但是还必须把它们暴露给开发者。可以通过属性实现这个功能。我们将建立一个默认索引器基于特定按钮的索引返回它的引用。这样你就能编程使用典型控件数组中的MyButtonArray(myIndex)语法了。建立默认属性给组件添加下面的代码:publicSystem.Windows.Forms.ButtonthisintIndexgetreturn(System.Windows.Forms.Button)this.ListIndex;实现Remove方法现在已经建立了暴露数组中按钮的属性,可以建立从数组中
10、删除按钮的机制了。为了从数组中删除一个按钮,必须从集合的内部List对象和窗体的Controls集合中删除它。给组件添加下面的方法:publicvoidRemove()/检查以确保有按钮可以删除if(this.Count>0)从主窗体上的控件集合的数组按钮数组中删除最后一个注意在访问数组时使用了默认属性HostForm.Controls.Remove(thisthis.Count-1);this.List.RemoveAt(this.Count-1);)建立公用事件处理程序最后一步是为控件数组建立事件处理程序来处理公用的事件。在演示中,将为按钮的点击事件建立一个方法,接着添加代码把该事件
11、与事件处理程序关联。建立公用事件处理程序给组件添加下面的方法:publicvoidClickHandler(Objectsender,System.EventArgse)System.Windows.Forms.MessageBox.Show("Youhaveclickedbutton"+(System.Windows.Forms.Button)sender).Tag.ToString();)该方法通过检索存储在按钮的Tag属性的索引,显示一个消息框表明哪个按钮被点击了。该方法的参数与被处理事件的相同,对于事件处理程序是必要的。你也必须把该事件与事件处理程序关联。把该事件与
12、事件处理程序关联给AddNewButton方法添加下面的代码:aButton.Click+=newSystem.EventHandler(ClickHandler);测试该项目现在组件已经完成了,需要建立一个应用程序来测试该组件。建立测试应用程序1、在解决方案管理器中,右键点击Form1并从弹出菜单中选择ViewDesigner。Form1的设计器被打开了。2、给窗体添加两个按钮。3、把这些按钮的位置调整到窗体的右侧。4、设置这些按钮的属性:按钮NameTextButton1btnAddAddButtonButton2btnRemoveRemoveButton5、在解决方案管理器中,右键点击F
13、orm1并从弹出菜单中选择ViewCode。Form1的代码编辑器被打开了。6、在Form1的类声明中,声明下面的控件数组对象:/声明新的ButtonArray对象ButtonArrayMyControlArray;7、在窗体的构造函数中,在方法结尾前添加下面的代码:MyControlArray=newButtonArray(this);该语句建立了一个新的ButtonArray对象。它的参数this指向建立新ButtonArray的窗体,将成为放置按钮数组的窗体。8、在解决方案管理器中,右键点击Form1并从弹出菜单中选择ViewDesigner。9、在设计器中双击btnAdd来打开btnA
14、dd_Click事件的代码编辑器。10、在方法btnAdd_Click中添加代码调用MyControlArray的AddNewButton方法:/调用MyControlArray的AddNewButton方法MyControlArray.AddNewButton();/改变Button0的BackColor属性MyControlArray0.BackColor=System.Drawing.Color.Red;11、在解决方案管理器中,右键点击Form1并从弹出菜单中选择ViewDesigner。12、在设计器中双击btnRemove来打开btnRemove_Click事件的代码编辑器。13、
15、在btnRemove_Click方法中添加下面的代码:/调用MyControlArray的Remove方法MyControlArray.Remove();14、保存项目测试该项目1、从Debug菜单中选择Start。Form1窗体被打开,上面有三个按钮,标签分别是AddButton、RemoveButton和Button1。2、点击Button1。显示了一个消息框,消息框正确地显示了索引。3、点击几次AddButton按钮。每次点击会给窗体添加一个新按钮。点击任何一个新按钮将导致一个正确显示该按钮索引的消息框。注意Button0的颜色改变为红色,是btnAdd_Click事件中下面一行的结果:
16、MyControlArray(0).BackC010r=System.Drawing.Color.Red4、点击几次RemoveButton按钮。每次点击时从窗体上删除一个按钮。5、点击RemoveButton按钮直到窗体右侧的所有按钮都被删除为止。6、再次点击AddButton按钮。按钮再次添加到窗体并且索引的编号正确。结论本文演示了怎样建立封装控件数组功能的组件。你可以看到怎样建立方法来动态地给窗体添加和删除控件,怎样通过默认属性或者索引器暴露对象。上面的代码已经实现了所有的功能,还可以通过为组件编写自定义代码来扩展控件数组。代码:form1.csusingSystem;usingSyst
17、em.Drawing;usingSystem.Collections;usingSystem.ComponentModel;usingSystem.Windows.Forms;usingSystem.Data;namespaceDAddControl/<summary>/Form1的摘要说明。/summarypublicclassForml:System.Windows.Forms.FormprivateSystem.Windows.Forms.ButtonbtnAdd;privateSystem.Windows.Forms.ButtonbtnRemove;ButtonArrayM
18、yControlArray;/<summary>/必需的设计器变量。/</summary>privateSystem.ComponentModel.Containercomponents=null;publicForm1()/Windows窗体设计器支持所必需的/InitializeComponent();/TODO:在InitializeComponent调用后添加任何构造函数代码/MyControlArray=newButtonArray(this);)/<summary>/清理所有正在使用的资源。/summaryprotectedoverridevoi
19、dDispose(booldisposing)if(disposing)if(components!=null)components.Dispose();)base.Dispose(disposing);)#regionWindows窗体设计器生成的代码/<summary>/设计器支持所需的方法-不要使用代码编辑器修改/此方法的内容。/</summary>privatevoidInitializeComponent()(this.btnAdd=newSystem.Windows.Forms.Button();this.btnRemove=newSystem.Window
20、s.Forms.Button();this.SuspendLayout();/btnAdd/this.btnAdd.Location=newSystem.Drawing.Point(216,0);this.btnAdd.Name="btnAdd"this.btnAdd.TabIndex=0;this.btnAdd.Text="AddButton"this.btnAdd.Click+=newSystem.EventHandler(this.btnAdd_Click);/btnRemove/this.btnRemove.Location=newSystem.
21、Drawing.Point(216,240);this.btnRemove.Name="btnRemove"this.btnRemove.TabIndex=1;this.btnRemove.Text="RemoveButton"this.btnRemove.Click+=newSystem.EventHandler(this.btnRemove_Click);/Form1/this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);this.ClientSize=newSystem.Drawing.Size(2
22、92,266);this.Controls.Add(this.btnRemove);this.Controls.Add(this.btnAdd);this.Name="Form1"this.Text="Form1"this.ResumeLayout(false);#endregion/<summary>/应用程序的主入口点。/</summary>STAThreadstaticvoidMain()(Application.Run(newForm1();)privatevoidbtnAdd_Click(objectsender,Sys
23、tem.EventArgse)(/调用MyControlArray的AddNewButton方法MyControlArray.AddNewButton();/改变Button0的BackColor属性MyControlArray0.BackC010r=System.Drawing.Color.Red;)privatevoidbtnRemove_Click(objectsender,System.EventArgse)(MyControlArray.Remove();)ButtonArray.csusingSystem;usingSystem.Windows.Forms;namespaceDAd
24、dControl(/<summary>/ButtonArray的摘要说明。/</summary>publicclassButtonArray:System.Collections.CollectionBase(privatereadonlySystem.Windows.Forms.FormHostForm;publicButtonArray()(/TODO:在此处添加构造函数逻辑/)publicButtonArray(System.Windows.Forms.Formhost)(HostForm=host;/this.AddNewButton();)publicSystem.Windows.Forms.ButtonAddNewButton()(/为Button类建立新的实例S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《社戏》考点复习与答题技巧精讲
- 安全生产综合知识实操考例题以及答案
- 医院财务部门审计整改措施
- 市政工程招标周期管理措施
- 老龄化社会背景下2025年老年教育教学方法革新分析报告
- 区块链技术在文化创意产业的应用与前景
- 2025年电力电容器及其配套设备项目合作计划书
- 医疗信息共享现状分析与挑战解读
- 企业数字化转型中的办公自动化与区块链技术融合研究
- 汽车行业2025芯片短缺应对策略研究:市场策略与长期发展路径优化研究报告
- 营销策划 -2024凯乐石冲锋衣品牌小红书营销方案
- 形象艺术设计智慧树知到答案2024年西安工程大学
- 餐饮服务初级试题练习附有答案
- 2024年1月浙江省普通高校招生选考物理试题和答案
- 项目验收通知书模板
- 紧密型县域医共体总医院一体化运行工作方案
- 2025年山东省春季高考模拟考试英语试卷试题(含答案详解)
- 2024绿色工业园区评价通则
- 子宫脱垂护理
- Pep 新版小学英语六年级下册一般过去时复习课教案
- 医院各科室物品采购清单
评论
0/150
提交评论