C#.NET中动态添加与删除控件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C#.NET中动态添加与删除控件
数组为共享公用功能的一组控件一起工作提供了便捷的途径。例如,一组控件可能用于显示相关的数据,或者在被点击时提供相关的行为。C#本身并不支持控件数组的建立,但是你可以通过编程复制控件数组的所有功能。本文介绍复制控件数组功能的简单组件的建立。
控件数组的主要用处有:
1,使用相同的名称与索引访问一组控件,允许用编号检索和设置数据项并且在整个数组中重复。这个功能可以使用下面的代码实现。
伪代码
myControl[myIndex].MyProperty = myValue;
myControl[myIndex + 1].MyMethod
2,多个对象使用同一个事件处理程序(event handler)处理事件,在这些事件中检索和使用索引,代码如下:
伪代码
private void myControl_Click(System.Object sender, System.EventArgs e)
{
Messagebox.Show("You have clicked MyControl number " +
myControl.Index);
}
3,在运行时动态添加或者删除控件,代码如下:
伪代码
for (int i = 1; i < 6; i++)
{
//插入代码来建立控件并给属性赋值
}
C#允许你复制与控件数组相关的一些功能。例如,你能使用委托把多个对象的事件绑定到一个事件处理程序。但是,如果把这些功能合并到一个动态的、容易管理的组件中更加简便。本文将建立有下面特性的组件:
·建立索引和排序控件的集合。将使用按钮集合来演示。
·一个事件处理程序来处理衍生的按钮的点击事件。
·使用索引引用控件和成员的代码。
·给窗体动态添加和删除控件的代码。
建立项目
在本节中将建立并命名一个项目,并给该项目添加一个类。该类将封装实现控件数组的代码。
1、选择File-> New-> Project菜单打开New Project对话框。
2、从Visual C#项目列表中选择Windows Application项目模版,在Name框中输入ButtonArrayProject。
3、选择File-> Save All保存项目。
实现一个集合
ButtonArray类会处理通过一个集合的实现来保存和组织控件数组的事务。集合是包含索引对象变量列表的对象,也包含add、remove等方法和其它的操作对象。本节中将建立一个继承自System.Collections.CollectionBase(.NET框架组件中提供必要的集合功能的类)的类,并实现提供必要功能的方法。
建立继承类的过程:
1、从Project菜单中选择Add Class。
2、根据情况把类命名为ButtonArray.cs。类的代码编辑器将打开。
3、在类的声明中,指定它继承自.NET框架组件的System.Collections.CollectionBase 类。
public class ButtonArray : System.Collections.CollectionBase
{
// 省略了设计者增加的代码
}
System.Collections.CollectionBase类为集合提供了很多必要的功能。其中包括一个跟踪集合中对象的List对象,维护集合中当前对象数量的Count属性,允许删除特定位置索引的对象的RemoveAt方法。在实现控件数组集合时会使用到它们。
因为每个控件数组与一个窗体关联,索引必须添加一个字段来保存该窗体的引用。通过建立私有的、只读字段来保存引用,可以保证每个控件数组组件只与以一个窗体关联。
为组件建立私有、只读字段
立即给类声明添加下面的代码:
private readonly System.Windows.Forms.Form HostForm;
在集合中实现的第一个方法是AddNewButton。该方法建立一个新的按钮控件并把它添加到目标窗体。你也可以使用该方法为新按钮设置初始属性。
实现AddNewButton方法
在ButtonArray类的代码编辑器中输入下面的代码:
public System.Windows.Forms.Button AddNewButton()
{
//为Button类建立新的实例
System.Windows.Forms.Button aButton = new
System.Windows.Forms.Button();
//将该按钮添加到集合的内部列表
this.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();
return aButton;
}
上面的方法的功能是:
1、建立一个新按钮。
2、把它添加到内部列表和HostForm引用的窗体的控件集合。
3、设置初始属性,包括设置Tag属性来索引该按钮。你可以在这一段中添加代码为控件设置更多的属性。
4、返回新按钮,这样它就能立即被修改并指定给其它的对象引用。
你必须建立一个构造函数(组件被初始化时运行的方法),当控件数组类的一个新实例被建立时,它用来设置HostForm字段的值并把新按钮添加到窗体。可以使用下面的方式达到这个目的。
建立构造函数
为类建立构造函数。
// 使用下面的构造函数代替默认的构造函数
public ButtonArray(System.Windows.Forms.Form host)
{
HostForm = host;
this.AddNewButton();
}
构造函数需要一个参数,即放置按钮数组的窗体。它把该值指定给HostForm字段,接着类的AddNewButton方法给窗体添加一个新按钮。
暴露控件数组
现在已经建立了建立和跟踪数组中控件的途径,但是还必须把它们暴露给开发者。可以通过属性实现这个功能。我们将建立一个默认索引器基于特定按钮的索引返回它的引用。这样你就能编程使用典型控件数组中的MyButtonArray(myIndex)语法了。
建立默认属性
给组件添加下面的代码:
public System.Windows.Forms.Button this [int Index]
{
get
{