首页 > 编程 > .NET > 正文

在VB.Net中创建使用控件数组

2024-07-10 13:00:40
字体:
来源:转载
供稿:网友
注册会员,创建你的web开发资料库, 

在vb.net中创建使用控件数组

首先创建一个button类型控件数组:

1、创建“windows应用程序”类型的工程,添加名为buttonarray的类,并使该类继承 system.collection.collectionbase 类。system.collections.collectionbase类是.net框架类库中为集合操作提供抽象的基类,通过对它的继承可以为我们的buttonarray类具备集合增加、删除、索引的功能。

2、为buttonarray类添加parentform属性,即控件组所在窗体,创建初始化函数(构造函数);

3、为控件数组类增加additem方法,该方法在控件数组类中添加成员;

4、为控件数组类增加removeitem方法,该方法在控件数组中删除一个成员。

 

示例代码:

public class buttonarray

    inherits system.collections.collectionbase

    private readonly parentform as system.windows.forms.form

    public sub new(byval pform as system.windows.forms.form)

        parentform = pform

    end sub

    default public readonly property item(byval index as integer) as system.windows.forms.button

        get

            return me.list.item(index)   ' buttonarray的list 属性从collectionbase 继承

        end get

    end property

    public sub additem()

        dim btnitem as new system.windows.forms.button

        me.list.add(btnitem)

        parentform.controls.add(btnitem)                  '向窗体中增加控件

        btnitem.tag = me.count                            'count属性从collectionbase 继承

        btnitem.top = me.count * 30

        btnitem.left = 200

        btnitem.text = "button" & me.count.tostring

        addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序

    end sub


    public sub additem(byval btnitem as system.windows.forms.button)

        me.list.add(btnitem)
        addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序

    end sub
    public sub removeitem()

        if me.count > 0 then

            parentform.controls.remove(me(me.count - 1))

            me.list.removeat(me.count - 1)

        end if

    end sub

    public sub btnitem_click(byval sender as object, byval e as system.eventargs)

        '在这里编写控件数组对点击事件的响应

        '例如:

        msgbox("点击:" & sender.gettype().tostring & ctype(ctype(sender, button).tag, string))

    end sub

end class


 

 

使用创建的控件数组

在form1中放置两个按钮button1、button2,分别测试控件数组的增添、删除。

双击form添加代码:

public class form1

    inherits system.windows.forms.form

 

……windows窗体设计器生成的代码……

    dim buttons as new buttonarray(me)

 

private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click

        buttons.additem()

    end sub

 

private sub button2_click(byval sender as system.object, byval e as system.eventargs) handles button2.click

        buttons.removeitem()

    end sub

end class


其他的控件数组也可以用类似的方式来实现
例如 label控件数组

labelarray.vb代码如下:
public class labelarray
    inherits system.collections.collectionbase

    private readonly parentform as system.windows.forms.form

    public sub new(byval pform as system.windows.forms.form)

        parentform = pform

    end sub

    default public readonly property item(byval index as integer) as system.windows.forms.label

        get

            return me.list.item(index)   ' buttonarray的list 属性从collectionbase 继承

        end get

    end property


    public sub additem(byval btnitem as system.windows.forms.label)

        me.list.add(btnitem)

        addhandler btnitem.click, addressof btnitem_click '绑定事件处理程序

    end sub
   


    public sub btnitem_click(byval sender as object, byval e as system.eventargs)

        '在这里编写控件数组对点击事件的响应

        '例如:

        msgbox("点击:" & sender.gettype().tostring & ctype(ctype(sender, label).tag, string))

    end sub
end class


使用创建的label控件
在form1中放置两个按钮label1、label2

双击form添加代码:

public class form1

    inherits system.windows.forms.form


#region " windows 窗体设计器生成的代码 "

    public sub new()
        mybase.new()

        '该调用是 windows 窗体设计器所必需的。
        initializecomponent()

        '在 initializecomponent() 调用之后添加任何初始化
        '用来绑定label
        bindarray()

    end sub
……windows窗体设计器生成的其他代码……

#end region
  dim labels as new labelarray(me)
  public sub bindarray()
        me.label1.tag = "1111"
        me.label2.tag = "222"
        labels.additem(me.label1)
        labels.additem(me.label2)
    end sub
end class

然后可以测试点击两个label可以显示相应的tag的信息。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表