首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

在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的信息。

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章