精华内容
下载资源
问答
  • VB.NET中使用控件数组

    万次阅读 2010-05-20 08:40:00
    普通控件仅使用名称就可以识别,而引用控件数组中的成员则需要同时使用名称和索引。开发人员在 Visual Basic 6.0 以及更早的版本中使用控件数组主要有以下三个理由: 1. 在循环中访问数组中控

    http://www.cnblogs.com/yunbo/archive/2009/08/13/1545657.html

     

    控件数组是位于一个窗体上共享同一名称的一组同种类型控件。普通控件仅使用名称就可以识别,而引用控件数组中的成员则需要同时使用名称和索引。开发人员在 Visual Basic 6.0 以及更早的版本中使用控件数组主要有以下三个理由:
    1.        在循环中访问数组中控件的属性。
    2.        向窗体动态添加新控件。
    3.        允许一个事件例程与多个控件连接 。
    控件数组的使用,极大的方便了开发人员。然而,刚刚从Visual Basic6.0(以下简称VB6.0)过渡到Visual Basic.Net(以下简称VB.NET)的初学者却发现,在VB.NET中似乎不能使用控件数组了。笔者仔细查阅了VB.NET的MSDN文档发现,在 VB.NET 中,确实不再支持控件数组。原因是,VB.NET对事件模型作了很大的改动,引入了另外一种数据类型――控件集合模型,使控件数组没有存在的必要。就像 VB6.0 中的控件数组可以共享事件一样,VB.NET 中的事件模型允许任何事件处理程序都可以处理来自多个控件的事件,这就允许创建属于不同类型但共享相同事件的控件组。
    所谓控件集合是指包含在一个容器中的所有控件的总和,能够创建控件集合的容器有:Form、Panel、GropBox等。程序运行时,可以通过访问容器的Control属性来得到该容器中的所有控件。
    下面将演示如何通过控件集合来使用控件数组:
    一、        直接使用Form容器的控件集合来使用控件数组:
    建立一个VB.NET项目,在Form1中添加三个TextBox控件,名称分别为:TextBox1、TextBox2、TextBox3,一个Button控件。
    双击Button,输入如下代码:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ‘下面的语句是通过数组元素的下标来访问Form中的每一个元素。
            Me.Controls.Item(0).Text = "集合中的第一个元素"
            Me.Controls.Item(1).Text = "集合中的第二个元素"
            Me.Controls.Item(2).Text = "集合中的第三个元素"
            Me.Controls.Item(3).Text = "集合中的第四个元素"
    End Sub
    运行项目后,点击Button,看到的结果是:Form1中的所有控件(包括Button自己)的Text属性都被修改了,同时还发现,最后加入的的控件变成了集合中的第一个元素(下标为0)。这个结果说明:
    Form1中的所有控件已经自动构成了一个控件集合(控件数组),这个特点使得建立控件数组变得非常简单。
    在访问这些控件时,除了可以通过控件名称直接访问外,还可以通过Contro.Item(n)属性按下标访问集合中的每一个控件;
    集合中控件的类型可以不相同,这点和VB6.0完全不同;
    集合中的下标顺序是按照加入控件的顺序倒排的;
    VB.NET中控件数组的特点让人稍感不适的是,控件数组的下标是按加入顺序的倒排续产生的,但程序员完全可以改变这个顺序:在代码编辑窗中点击“#Region " Windows 窗体设计器生成的代码”旁边的“+”号,代码展开后,找到如下代码:
    Me.Controls.Add(Me.Button1)
    Me.Controls.Add(Me.TextBox3)
    Me.Controls.Add(Me.TextBox2)
    Me.Controls.Add(Me.TextBox1)
    这个代码顺序就是控件数组的下标顺序,只要改变这个顺序就可以改变控件数组中每个以元素的下标。
    在Form中构成控件数组非常方便,但也有一个小问题:一般来说,Form中的控件往往有很多种,系统建立控件集合的时候将会把其中的所有控件放在同一个集合中,这样一来,程序员在写代码的时候有可能将每一个控件的下标混淆,为了解决这个问题,可以用Panel容器来根据需要将某类控件建立成控件数组,也就避免了上述问题。
    建立的方法非常简单:只需要在Form中添加一个Panel控件,然后将需要建立控件数组的控件加入其中即可,然后用:Panel.Control.Item(n)来访问其中的每一个控件。
    二、        用代码建立控件集合。
        建立一个VB.NET项目,在Form中添加三个TextBox和一个Button控件,在代码编辑窗口中输入如下代码:
    Dim TextboxArray As New ArrayList ‘定义一个数组例表
    Private Sub BiuldTextBoxArray() ‘过程用来将Form上的三个TextBox加入到数组例表中
         TextboxArray.Add(TextBox1)
          TextboxArray.Add(TextBox2)
          TextboxArray.Add(TextBox3)
    End Sub
    ‘让Form在启动的时候将三个TextBox控件加入到数组例表中,构成控件数组。
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        BiuldTextBoxArray()
    End Sub
    ‘编写Button点击事件代码,利用控件数组访问三个TextBox控件
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          TextboxArray(0).text = "文本框第一个元素"
          TextboxArray(1).text = "文本框第二个元素"
          TextboxArray(2).text = "文本框第三个元素"
    End Sub
        运行工程,点击Button,发现三个TextBox都被修改了,效果和前面的方法一样。
    三、        在程序中动态添加控件数组。
    前面定义的控件数组都是在设计阶段完成的,它要求,控件数组中的控件数量必须已知,也叫静态控件数组;但很多时候要求,控件数组中的控件数量要用程序的某些运行情况来确定,这就要求,控件数组中的控件要能实现动态添加。
    建立一个VB.NET工程,在Form上添加两个Button,其中,Button1用来添加动态控件数组;Button2用来修改数组中每个控件的属性。
    在代码编辑窗口中输入如下代码:
    Dim List As New ArrayList ‘定义一个例表对象,用来集合数组控件
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        For i = 0 To 4 ‘利用循环语句动态加入控件数组。
            Dim FirstTextBox As New TextBox ‘定义文本框对象
            Me.Controls.Add(FirstTextBox) ‘将一个文本框控件加入到Form上
            List.Add(FirstTextBox) ‘将文本框控件加入到例表集合中
            List.Item(i).top = i * List.Item(i).height + 20 ‘修改新加入控件在Form上的位置
            List.Item(i).left = 100
            FirstTextBox.TabIndex = i ‘修改新加入控件的TabIndex值
            List.Item(i).text = "TextBox" & i.ToString ‘修改默认文本。
        Next
    End Sub
    用循环来访问动态控件数组中的控件。
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim i As Integer
        For i = 0 To 4
            List.Item(i).text = "第 " & i.ToString & " 个元素"
        Next
    End Sub
    运行项目,先点击Button1,Form上将出现5个文本框,然后再点击Button2,修改这五个文本框的Text属性。
    从这个实例看出,VB.NET中动态加入控件数组与在VB6.0中实现动态数组有一个显著的不同:VB6.0中必须要有一个静态的“控件种子”,而在VB.NET中已经不需要了。
    四、        控件数组的事件响应。
    控件数组的最重要的特色之一就是让一组控件响应同一个事件,在事件例程中接收控件具体某控件的Index值来分别处理处理具体问题,这点已经在VB6.0中表现得淋漓尽致了,它在VB.NET中同样可以实现,只不过实现方式有了变化。由于在容器中的每一个控件只要不作特殊处理,都会自动构成了控件集合,这样,只要对原有的事件例程作少量修改,就可以非常方便的实现用一个事件例程响应某个集合中所有控件产生的事件。
    下面演示实现用同一个例程来处理两个Button和一个TextBox发出的Click事件。
    建立一个VB.NET项目,在Form上添加两个Button,和一个TextBox。
    在代码编辑窗口中点击“#Region " Windows 窗体设计器生成的代码”旁边的“+”号,代码展开后,找到如下代码并调整为下面的顺序:
    Me.Controls.Add(Me.TextBox1)
    Me.Controls.Add(Me.Button1)
    Me.Controls.Add(Me.Button2)
    输入如下代码:
    Private Sub mControl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, TextBox1.Click
            Select Case sender.tabindex
                Case 0
                    MessageBox.Show("你点击了 Button1 按钮")
                Case 1
                    MessageBox.Show("你点击了 Button2 按钮")
                Case 2
                    MessageBox.Show("你点击了 TextBox1 按钮")
            End Select
        End Sub
    在这段 代码中:Private Sub mControl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, TextBox1.Click 是一个自定义事件,在Handles后面的语句表示:该例程将响应Button1, Button2, TextBox1控件发出的Click事件,如果还有其他控件,也可以放在后面,每一个控件名称用“,”号隔开。
    运行项目,分别点击Form上面的三个控件就能体会到它的用法。

    ====================

    vb.net里面的动态控件数组的问题,这个动态控件数组在vb里面easy到极致,可是在vb.net里面却有点让人摸不着头脑。
    其实也很简单,因为vb.net和vb不同拉,来看看vb.net的动态控件数组如何实现。

     

    1、在form的头部定义一个公共的ArrayList类型的变量    

          Dim m_items As New ArrayList

    2、在程序中动态生成控件

           while (a<b)

               dim lblControl as Label= new Label

               lblControl .Text="你好"
               lblControl .dock=......top
               lblControl .autosize=false.
               ....

               me.controls.add(lblControl )'把动态产生的控件放到对应的区域


               '下面这个地方注意拉,
               m_items.Add(lblControl )'把这个label放到前面第一步定义的ArrayList中去
               AddHandler label.Click, AddressOf LblControlArrayClick '给这组动态控件定义click事件的触发函数LblControlArrayClick 。

           end while

    3、定义LblControlArrayClick 的click事件的触发函数,这个是和vb不同的地方的关键所在拉。

    '控件数组事件
         Private Sub LblControlArrayClick (ByVal sender As Object, ByVal e As EventArgs)


             Dim lblText As String
             lblText = CType(sender, Label).Text        '这里CType就是将触发事件的对象还原为Label对象,
                                                                             '有点像java里面的集合阿,放进去后再取出来的时候,要造型一下。
            msgbox ("所电击的动态控件的文字是:" & lblText)

         end sub

    好啦,就是这么简单,vb.net中的控件数组。
    如果你要为控件数组定义其他的触发事件,只要修改对应的触发就可以了。

    展开全文
  • C#变通方法实现VB6.0里面的控件数组,当然VB.net也可以用, 程序很简单,主要是给出一种思路,控件数组可以提高编程效率和处理问题的快捷性
  • 控件数组VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它. 首先请看界面 ...
    
    在C# WinForm程序中创建控件数组及相应的事件处理

    控件数组是VB提供的一个优秀的设计解决方案,它能很方便快捷的处理大批同类控件的响应和时间处理,但不知为什么在C#中这个优秀特性没有传承下来,甚为可惜,本文将要探讨就是如何在C# WinForm程序实现它.
    首先请看界面
    在上面的界面中,本人想实现一个42个元素的Button数组来实现一个日历的功能,上面显示出了一部分. 其中采用了网格布局来放置这些按钮.
    手工创建为全部按钮后,在窗体类中代码中定义成员变量控件数组: private Button[] btns;
    然后在构造函数中初始化:

    btns = new Button[42];

    btns[0] = this.button1;

    btns[1] = this.button2;

    ......

    btns[40] = this.button41;

    btns[41] = this.button42;
    大家不禁要问了,如果采用动态创建岂不更好.其实不然,我采用手工创建的主要原因是手工放置调整按钮的位置和大小较为方便,如果动态创建出来的话,把他们放到界面上比较麻烦,尤其是在比较复杂的布局中.
    然后是为上述数组中的各个控件添加事件:

    for (int i = 0; i < btns.Length;i++ )

     {

             btns[i].Click += new System.EventHandler(this.btns_Click);

    }

    如果是要根据下标添加不同事件也可以的,做一些分支即可. C#的这种做法类似JavaSwing中AddActionListener做法,发挥以下我们也可用C#实现MVC.
    最后定义btns_Click事件处理函数就行了:

    // 按钮数组的事件处理

    private void btns_Click(object sender, System.EventArgs e)

    {

         String[] arrs = ((Button)sender).Text.Split('\n');

        String day = arrs[0];

        if (day.Length < 2)     {   day = "0" + day;     }

        String date = currMonthLbl.Text + "-" + day;

        mainForm.RefreshDatePanel(date);

    }
    从上面可以看出,将sender用Button强制转化一下就能得到事件对应的控件,然后根据它的Text属性可以进行唯一性判断,其后再进行单独处理即可.
    总结起来,在C#中创建控件数组很简单,首先在类中创建一个控件类型的数组,然后初始化它,具体初始化是动态创建还是链接到已有控件可以根据情况自行选择,然后为数组元素添加事件,最后实现事件即可,在事件实现中即可以通过转化sender来得到相应控件.


    c#里如何实现控件数组

    //建立4个Lable的控件数组,并赋值  
      private   void   creatBts()  
      {  
      System.Windows.Forms.Label[]   labArry   =new   System.Windows.Forms.Label[4];  
      for   (int   i=0;i<=3;i++)  
      {  
      labArry[i]   =   new   System.Windows.Forms.Label();  
      labArry[i].Location   =new   System.Drawing.Point   ((16+64*i),(16+24*i));  
      this.Controls.Add   (labArry[i]);  
      labArry[i].Text   =   i.ToString();  
      }  
      }   
      
     //Label[]   mylabel=new   Label[i];//i是label的数量-1  
      mylabel[0]=label1;  
      mylabel[1]=label2;  
      ....  
      for(int   j=0;j<=i;j++)  
      {  
        mylabel[j].Text="ok";  
      }

    //for(int   i=0;i<10;i++)  
      {  
      ((TextBox)(this.FindControl("textBox"+i))).Text   =i;  
      }  


    C#创建控件数组

    能不能在代码里创建好几个控件(如Button按钮),
    这样行不行Button[] btn=new Button[3];但是用了this.controls.add(btn[0]),form1运行后没有啊,如果是单个建的话Button btn=new Button;运行后是有的,那到底能不能用数组形式创建呢?二维数组行不行呢?


    还要再加上一句
    btn[0]=new Button();
    这样就行了
      public Form1()
     
        {

    InitializeComponent();

    Button[] btn = new Button[3];

    int Top= 0;

    for (int i = 0; i < 3; i++)

    {

    btn[i] = new Button();

    btn[i].Top = Top;

    this.Controls.Add(btn[i]);

    Top += 30;

    }
     
        }
     
    不知道为什么要定义二维数组,对二维数组的用处不太了解。不过用二维也是可以的。代码:
      public Form1()
     
        {

    InitializeComponent();

    Button[,] btn = new Button[3,3];

    int Top= 0;

    for (int i = 0; i < 3; i++)

    {

    for (int j = 0; j < 3; j++)

    {

    btn[i,j] = new Button();

    btn[i,j].Top = Top;

    this.Controls.Add(btn[i,j]);

    Top += 30;

    }

    }
     
        }

    展开全文
  • VB.Net创建使用控件数组

    千次阅读 2009-02-09 11:02:00
    首先创建一个Button类型控件数组: 1、创建“Windows应用程序”类型的工程,添加名为ButtonArray的类,并使该类继承 System.Collection.CollectionBase 类。System.Collections.CollectionBase类是.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的信息。

     

     

    11111111111111111111111111111111111111111

     

     

    在VB.NET中使用控件数组

    控件数组是位于一个窗体上共享同一名称的一组同种类型控件。普通控件仅使用名称就可以识别,而引用控件数组中的成员则需要同时使用名称和索引。开发人员在 Visual Basic 6.0 以及更早的版本中使用控件数组主要有以下三个理由:
    1.        在循环中访问数组中控件的属性。
    2.        向窗体动态添加新控件。
    3.        允许一个事件例程与多个控件连接 。
    控件数组的使用,极大的方便了开发人员。然而,刚刚从Visual Basic6.0(以下简称VB6.0)过渡到Visual Basic.Net(以下简称VB.NET)的初学者却发现,在VB.NET中似乎不能使用控件数组了。笔者仔细查阅了VB.NET的MSDN文档发现,在 VB.NET 中,确实不再支持控件数组。原因是,VB.NET对事件模型作了很大的改动,引入了另外一种数据类型――控件集合模型,使控件数组没有存在的必要。就像 VB6.0 中的控件数组可以共享事件一样,VB.NET 中的事件模型允许任何事件处理程序都可以处理来自多个控件的事件,这就允许创建属于不同类型但共享相同事件的控件组。
    所谓控件集合是指包含在一个容器中的所有控件的总和,能够创建控件集合的容器有:Form、Panel、GropBox等。程序运行时,可以通过访问容器的Control属性来得到该容器中的所有控件。
    下面将演示如何通过控件集合来使用控件数组:
    一、        直接使用Form容器的控件集合来使用控件数组:
    建立一个VB.NET项目,在Form1中添加三个TextBox控件,名称分别为:TextBox1、TextBox2、TextBox3,一个Button控件。
    双击Button,输入如下代码:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ‘下面的语句是通过数组元素的下标来访问Form中的每一个元素。
            Me.Controls.Item(0).Text = "集合中的第一个元素"
            Me.Controls.Item(1).Text = "集合中的第二个元素"
            Me.Controls.Item(2).Text = "集合中的第三个元素"
            Me.Controls.Item(3).Text = "集合中的第四个元素"
    End Sub
    运行项目后,点击Button,看到的结果是:Form1中的所有控件(包括Button自己)的Text属性都被修改了,同时还发现,最后加入的的控件变成了集合中的第一个元素(下标为0)。这个结果说明:
    Form1中的所有控件已经自动构成了一个控件集合(控件数组),这个特点使得建立控件数组变得非常简单。
    在访问这些控件时,除了可以通过控件名称直接访问外,还可以通过Contro.Item(n)属性按下标访问集合中的每一个控件;
    集合中控件的类型可以不相同,这点和VB6.0完全不同;
    集合中的下标顺序是按照加入控件的顺序倒排的;
    VB.NET中控件数组的特点让人稍感不适的是,控件数组的下标是按加入顺序的倒排续产生的,但程序员完全可以改变这个顺序:在代码编辑窗中点击“#Region " Windows 窗体设计器生成的代码”旁边的“+”号,代码展开后,找到如下代码:
    Me.Controls.Add(Me.Button1)
    Me.Controls.Add(Me.TextBox3)
    Me.Controls.Add(Me.TextBox2)
    Me.Controls.Add(Me.TextBox1)
    这个代码顺序就是控件数组的下标顺序,只要改变这个顺序就可以改变控件数组中每个以元素的下标。
    在Form中构成控件数组非常方便,但也有一个小问题:一般来说,Form中的控件往往有很多种,系统建立控件集合的时候将会把其中的所有控件放在同一个集合中,这样一来,程序员在写代码的时候有可能将每一个控件的下标混淆,为了解决这个问题,可以用Panel容器来根据需要将某类控件建立成控件数组,也就避免了上述问题。
    建立的方法非常简单:只需要在Form中添加一个Panel控件,然后将需要建立控件数组的控件加入其中即可,然后用:Panel.Control.Item(n)来访问其中的每一个控件。
    二、        用代码建立控件集合。
        建立一个VB.NET项目,在Form中添加三个TextBox和一个Button控件,在代码编辑窗口中输入如下代码:
    Dim TextboxArray As New ArrayList ‘定义一个数组例表
    Private Sub BiuldTextBoxArray()  ‘过程用来将Form上的三个TextBox加入到数组例表中
         TextboxArray.Add(TextBox1)
          TextboxArray.Add(TextBox2)
          TextboxArray.Add(TextBox3)
    End Sub
    ‘让Form在启动的时候将三个TextBox控件加入到数组例表中,构成控件数组。
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        BiuldTextBoxArray()
    End Sub
    ‘编写Button点击事件代码,利用控件数组访问三个TextBox控件
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          TextboxArray(0).text = "文本框第一个元素"
          TextboxArray(1).text = "文本框第二个元素"
          TextboxArray(2).text = "文本框第三个元素"
    End Sub
        运行工程,点击Button,发现三个TextBox都被修改了,效果和前面的方法一样。
    三、        在程序中动态添加控件数组。
    前面定义的控件数组都是在设计阶段完成的,它要求,控件数组中的控件数量必须已知,也叫静态控件数组;但很多时候要求,控件数组中的控件数量要用程序的某些运行情况来确定,这就要求,控件数组中的控件要能实现动态添加。
    建立一个VB.NET工程,在Form上添加两个Button,其中,Button1用来添加动态控件数组;Button2用来修改数组中每个控件的属性。
    在代码编辑窗口中输入如下代码:
    Dim List As New ArrayList ‘定义一个例表对象,用来集合数组控件
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Integer
        For i = 0 To 4 ‘利用循环语句动态加入控件数组。
            Dim FirstTextBox As New TextBox ‘定义文本框对象
            Me.Controls.Add(FirstTextBox) ‘将一个文本框控件加入到Form上
            List.Add(FirstTextBox) ‘将文本框控件加入到例表集合中
            List.Item(i).top = i * List.Item(i).height + 20 ‘修改新加入控件在Form上的位置
            List.Item(i).left = 100
            FirstTextBox.TabIndex = i ‘修改新加入控件的TabIndex值
            List.Item(i).text = "TextBox" & i.ToString ‘修改默认文本。
        Next
    End Sub
      用循环来访问动态控件数组中的控件。
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim i As Integer
        For i = 0 To 4
            List.Item(i).text = "第 " & i.ToString & " 个元素"
        Next
    End Sub
    运行项目,先点击Button1,Form上将出现5个文本框,然后再点击Button2,修改这五个文本框的Text属性。
    从这个实例看出,VB.NET中动态加入控件数组与在VB6.0中实现动态数组有一个显著的不同:VB6.0中必须要有一个静态的“控件种子”,而在VB.NET中已经不需要了。
    四、        控件数组的事件响应。
    控件数组的最重要的特色之一就是让一组控件响应同一个事件,在事件例程中接收控件具体某控件的Index值来分别处理处理具体问题,这点已经在VB6.0中表现得淋漓尽致了,它在VB.NET中同样可以实现,只不过实现方式有了变化。由于在容器中的每一个控件只要不作特殊处理,都会自动构成了控件集合,这样,只要对原有的事件例程作少量修改,就可以非常方便的实现用一个事件例程响应某个集合中所有控件产生的事件。
    下面演示实现用同一个例程来处理两个Button和一个TextBox发出的Click事件。
    建立一个VB.NET项目,在Form上添加两个Button,和一个TextBox。
    在代码编辑窗口中点击“#Region " Windows 窗体设计器生成的代码”旁边的“+”号,代码展开后,找到如下代码并调整为下面的顺序:
    Me.Controls.Add(Me.TextBox1)
    Me.Controls.Add(Me.Button1)
    Me.Controls.Add(Me.Button2)
    输入如下代码:
    Private Sub mControl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, TextBox1.Click
            Select Case sender.tabindex
                Case 0
                    MessageBox.Show("你点击了 Button1 按钮")
                Case 1
                    MessageBox.Show("你点击了 Button2 按钮")
                Case 2
                    MessageBox.Show("你点击了 TextBox1 按钮")
            End Select
        End Sub
    在这段 代码中:Private Sub mControl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, TextBox1.Click 是一个自定义事件,在Handles后面的语句表示:该例程将响应Button1, Button2, TextBox1控件发出的Click事件,如果还有其他控件,也可以放在后面,每一个控件名称用“,”号隔开。
    运行项目,分别点击Form上面的三个控件就能体会到它的用法。

     

    展开全文
  • VB控件数组之操作技巧

    万次阅读 热门讨论 2012-06-17 19:33:34
    运行设置数组控件的属性 设窗体上有若干个以 Command1 命名的命令按钮,现要求:点击其中一个按钮后,该按钮不可用,而其它的按钮均可用。以下几行代码可以实现这个要求,比一个一个的设置高效得多。 Private ...
     
    

    一.运行中设置数组控件的属性

    设窗体上有若干个以 Command1 命名的命令按钮,现要求:点击其中一个按钮后,该按钮不可用,而其它的按钮均可用。以下几行代码可以实现这个要求,比一个一个的设置高效得多。

    Private Sub Command1_Click(Index As Integer)
    
    Dim i As Integer '计数器
    Dim comNum As Integer '按钮的索引号
    comNum = 0
    For i = 0 To Command1.Count - 1
    comNum = comNum + 1
    If comNum > Command1.Count - 1 Then comNum = 0
    Command1(comNum).Enabled = True '让所有按钮可用
    Next
    Command1(Index).Enabled = False '让被单击按钮不可用
    
    End Sub


    二、运行中添加和卸载数组控件

    窗体上已有一个文本框Text1,程序需要在运行时动态地创建若干文本框,可这样实现:

    1.首先,设计时给Text1的Index属性设置为"0",这一步很重要:有了索引号才能创建数组控件;

    2.编写代码:[之前请给工程添加两个命令按钮,Name属性取缺省值,Caption属性分别为:添加、卸载]

    Private Sub Command1_Click()
    
    Dim txtNum As Integer 'Text1的Index号
    Dim Num As Integer '赋给各TextBox的值
    
    txtNum = 0 '初值
    Num = 1 '初值
    
    Text1(0).Text = "Text" & Num '第一个Text1的值
    
    Dim i As Integer '计数器
    For i = 0 To 4 '添加五个TextBox
    txtNum = txtNum + 1
    Num = Num + 1
    Load Text1(txtNum) '加载文本框
    Text1(txtNum).Top = Text1(txtNum - 1).Top + 450 '设置位置
    Text1(txtNum).Text = "Text" & Num '加载内容
    Text1(txtNum).Visible = True '令其可见:不能漏
    Next
    
    Command1.Enabled = False 
    Command2.Enabled = True
    
    End Sub
    
    Private Sub Command2_Click()
    
    Dim i As Integer, N As Integer
    N = 0
    For i = 1 To Text1.Count - 1
    N = N + 1
    Unload Text1(N)
    Next
    
    Command1.Enabled = True
    Command2.Enabled = False
    
    End Sub
    


    三、给运行中添加的数组控件命名并编写事件

    其实例二已经给数组控件命了名,只是简单了些。本例将文件夹"F:\Txt"下的所有.txt的文件名作为菜单的Caption添加到菜单项里[请事先建立此文件夹并拷贝一些.txt文件,或者更改代码],当点击这些菜单,程序将调出Windows的记事本打开相应的文件。
    键入以下代码前请启动VB的菜单编辑器,建立一个父菜单项[Naem和Caption属性任意],然后在此父菜单下建立一个子菜单,Name属性为"mnuFiles",Caption属性为"没有文件"。

    Dim MyPath As String '路径名变量
    
    '添加并命名菜单过程
    Private Sub AddMenu()
    
    Dim MenuNum As Integer '菜单索引号变量
    Dim MyFiles As String '文件名变量
    
    MenuNum = 0 '初值
    
    MyFiles = Dir(MyPath + "*.txt") '仅查找文本文档
    If MyFiles = "" Then Exit Sub '为空则退出过程
    
    mnuFiles(0).Caption = MyFiles '给第一个菜单命名
    
    Do Until MyFiles = ""
    MyFiles = Dir()
    If MenuNum = 0 Then MenuNum = 1
    MenuNum = MenuNum + 1
    Load mnuFiles(MenuNum) '加载菜单
    mnuFiles(MenuNum).Visible = True '设置为可见:不能漏
    mnuFiles(MenuNum).Caption = MyFiles
    If mnuFiles(MenuNum).Caption = "" Then Unload mnuFiles(MenuNum)
    '若菜单名为空则卸载掉
    Loop
    
    End Sub
    
    Private Sub Form_Load()
    
    MyPath = "F:\Txt\" '规定路径
    Call AddMenu '执行添加菜单过程
    
    End Sub
    
    Private Sub mnuFiles_Click(Index As Integer)
    
    Dim ret As String
    '用Windows的记事本打开文件:注意中间的空格不能少
    ret = "Notepad.exe" & " " & MyPath & mnuFiles(Index).Caption
    Shell ret, vbNormalFocus
    
    End Sub
    


    四、控件在窗体上的排列问题
    当然添加的数组控件多了,排列确实是个问题。下面的例子给窗体添加499个Label控件,加上事先绘制好的Index号定义为0的控件,总共有500个,能在窗体上从左到右、从上到下整齐地排列。程序运行时要花些许时间。

    Option Explicit
    
    Private Sub Form_Load()
    
    Me.Width = 6800
    Me.Height = 6000
    Me.Caption = "添加标签演示"
    With Label1(0)
    .Top = 0
    .Left = 120
    .Height = 200
    .Width = 300
    .Caption = ""
    End With
    
    AddLabels
    
    End Sub
    
    Private Sub AddLabels()
    
    Dim i As Integer '计数器
    Dim Num As Integer 'Label的Index号
    Dim k As Integer '判断是否满行
    Dim n As Integer '行数计数器
    
    Num = 0
    k = 0
    n = 0
    
    Label1(0).Caption = Num + 1
    
    For i = 1 To 499
    Num = Num + 1
    Load Label1(Num) '加载Label控件
    
    Select Case k 
    Case 0
    Label1(Num).Left = Label1(Num - 1).Left + Label1(0).Width + 20
    If Num = 20 Then n = n + 1: k = n
    
    Case n
    Label1(n * 20).Left = 120
    Label1(n * 20).Top = Label1(0).Height * n
    Label1(Num).Top = Label1(0).Height * n
    Label1(Num).Left = Label1(Num - 1).Left + Label1(0).Width + 20
    If Num = (n + 1) * 20 Then n = n + 1: k = n
    End Select 
    
    Label1(Num).Caption = Num + 1
    Label1(Num).Visible = True
    Next
    
    End Sub 
    


    展开全文
  • VB使用控件数组划直线,画矩形,画圆等,VB源码实现,代码简单,有参考性,对入门者友好。
  • 程序运行中使用LOAD方法,定义新的控件组元素,语法: LOAD 对象名(INDEX)值 使用UNLOAD方法可去除控件组中的元素。 INDEX值为数值型,可使用变量控制 对象名须与设计窗体时建立的第0个元素名相同 新对象的...
  • 程序代码: Dim current, prev, choice  '全局变量 '-------------这段代码是个额外加上的小测试可以忽略---------- '---------------用API来关闭正在运行运行的程序--------------- Private Declare Function ...
  • vb控件数组使用

    2009-03-27 22:44:00
    将不是控件数组的text一次性清空Dim I As Long For I = 1 To 8 Me("Text" & I).Text = "" Next 还有如果name不是"text" & i 的话,可以用 dim s as control for each s in form1.controls if typeof s is textbox ...
  • VB控件数组的操作技巧(混合文本)

    千次阅读 2011-07-20 23:47:46
    2011-3-22 9:31:00 VB控件数组的操作技巧 ━━━━━━━━━━━━━━━━━━━━━━━━━━ 控件数组有在设计时设置好的,也有在运行创建的。控件数组一方面使得程序简洁、令代码易于维护,另一方面能使...
  • 在 Visual Basic .NET 和 Visual C# .NET 创建控件数组摘要:本文介绍如何使用 Visual Basic® .NET 和 Visual C#™ .NET 创建和管理控件数组。 目录 简介 前提 创建项目 实现集合 公开控件数组 ...
  • C++Builder实现控件数组的功能
  • 程序代码: Private Sub Form_Load()  For i = 0 To Label1.Count - 1    Label1(i).Caption = "移动鼠标"  Next i End Sub Private Sub Label1_MouseMove(Index As Integer, Button As Int...
  • VB控件数组生成国际象棋棋盘,VB利用数组程序生成国际象棋的棋盘程序,如果你对使用VB编写游戏感兴趣,那么这个小程序可能会对你有用处。
  • VB.NET中使用控件数组 [转]转载:http://5inet.blogcn.com/diary,113722257.shtml在VB...普通控件仅使用名称就可以识别,而引用控件数组中的成员则需要同时使用名称和索引。开发人员在 Visual Basic 6.0 以及更
  • VB讲课笔记08:数组

    千次阅读 2018-03-12 18:01:30
    了解控件数组的概念、声明和使用。一、数组概念(一)数组定义数组是高级程序设计语言数据组织的一种方式,是一种带有下标的结构,是按下标进行访问的一组下标变量的“集合”。数组可以是一维、二维或多维的,每一...
  • VB.NET动态添加控件数组

    千次阅读 2006-10-25 16:18:00
    VB.NET控件数组? 项目的需求又变了,我必须要在我的窗口上根据读取的文件不同添加不同的checkbox,我本以为vb.net和vb一样一定会有控件数组呢,结果网上的高手们都说vb.net是没有控件数组这个概念的。不过可以...
  • VB6 通过winsock控件数组实现客户端和服务器多对一通信 注意:本文转载自http://blog.csdn.net/geohuskyer/article/details/6261062 说明:我是在最近开发一个考试系统过程搜索到上面文章的,它提供的思想非常实用...
  • VB 删除数组中指定元素实例

    热门讨论 2010-06-07 14:13:35
    VB 删除数组中指定元素实例 VB 删除数组中指定元素实例
  • VB.Net创建使用控件数组 (转)[@more@]在vb.NET创建使用控件数组XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office...
  • VB数组求平均成绩

    2010-06-07 14:19:52
    VB数组求平均成绩 VB数组求平均成绩
  • 各位大大:在VB中我们可以在程序开始初始化一批控件的某个属性代码如下: for i=0 to 10 if i/3=int(i/3) then ...而在VB.NET 创建不出控件数组 类似以上的功能该如何完成,望高手不吝赐教。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,124
精华内容 3,649
关键字:

vb程序中如何使用控件数组