C#.NET中动态添加与删除控件

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

{

相关文档
最新文档