一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在VB.Net中創(chuàng)建使用控件數(shù)組

 nxhujiee 2019-10-17

首先創(chuàng)建一個(gè)Button類型控件數(shù)組:

   1、創(chuàng)建“Windows應(yīng)用程序”類型的工程,添加名為ButtonArray的類,并使該類繼承 System.Collection.CollectionBase 類。System.Collections.CollectionBase類是.NET框架類庫(kù)中為集合操作提供抽象的基類,通過(guò)對(duì)它的繼承可以為我們的ButtonArray類具備集合增加、刪除、索引的功能。

   2、為ButtonArray類添加ParentForm屬性,即控件組所在窗體,創(chuàng)建初始化函數(shù)(構(gòu)造函數(shù));

   3、為控件數(shù)組類增加AddItem方法,該方法在控件數(shù)組類中添加成員;

   4、為控件數(shù)組類增加RemoveItem方法,該方法在控件數(shù)組中刪除一個(gè)成員。

  

   示例代碼:

   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)

   '在這里編寫(xiě)控件數(shù)組對(duì)點(diǎn)擊事件的響應(yīng)

   '例如:

   MsgBox("點(diǎn)擊:" & sender.GetType().ToString & CType(CType(sender, Button).Tag, String))

   End Sub

   End Class

  

  

  

   使用創(chuàng)建的控件數(shù)組

   在Form1中放置兩個(gè)按鈕Button1、Button2,分別測(cè)試控件數(shù)組的增添、刪除。

   雙擊Form添加代碼:

   Public Class Form1

   Inherits System.Windows.Forms.Form

  

   ……Windows窗體設(shè)計(jì)器生成的代碼……

   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

  
其他的控件數(shù)組也可以用類似的方式來(lái)實(shí)現(xiàn)
例如 Label控件數(shù)組

   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)

   '在這里編寫(xiě)控件數(shù)組對(duì)點(diǎn)擊事件的響應(yīng)

   '例如:

   MsgBox("點(diǎn)擊:" & sender.GetType().ToString & CType(CType(sender, Label).Tag, String))

   End Sub
End Class

  
使用創(chuàng)建的Label控件
在Form1中放置兩個(gè)按鈕Label1、Label2

   雙擊Form添加代碼:

   Public Class Form1

   Inherits System.Windows.Forms.Form

  
#Region " Windows 窗體設(shè)計(jì)器生成的代碼 "

   Public Sub New()
MyBase.New()

   '該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的。
InitializeComponent()

   '在 InitializeComponent() 調(diào)用之后添加任何初始化
'用來(lái)綁定label
BindArray()

   End Sub
……Windows窗體設(shè)計(jì)器生成的其他代碼……

   #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

   然后可以測(cè)試點(diǎn)擊兩個(gè)label可以顯示相應(yīng)的Tag的信息。

11111111111111111111111111111111111111111

在VB.NET中使用控件數(shù)組

控件數(shù)組是位于一個(gè)窗體上共享同一名稱的一組同種類型控件。普通控件僅使用名稱就可以識(shí)別,而引用控件數(shù)組中的成員則需要同時(shí)使用名稱和索引。開(kāi)發(fā)人員在 Visual Basic 6.0 以及更早的版本中使用控件數(shù)組主要有以下三個(gè)理由:
1.        在循環(huán)中訪問(wèn)數(shù)組中控件的屬性。
2.        向窗體動(dòng)態(tài)添加新控件。
3.        允許一個(gè)事件例程與多個(gè)控件連接 。
控件數(shù)組的使用,極大的方便了開(kāi)發(fā)人員。然而,剛剛從Visual Basic6.0(以下簡(jiǎn)稱VB6.0)過(guò)渡到Visual Basic.Net(以下簡(jiǎn)稱VB.NET)的初學(xué)者卻發(fā)現(xiàn),在VB.NET中似乎不能使用控件數(shù)組了。筆者仔細(xì)查閱了VB.NET的MSDN文檔發(fā)現(xiàn),在 VB.NET 中,確實(shí)不再支持控件數(shù)組。原因是,VB.NET對(duì)事件模型作了很大的改動(dòng),引入了另外一種數(shù)據(jù)類型――控件集合模型,使控件數(shù)組沒(méi)有存在的必要。就像 VB6.0 中的控件數(shù)組可以共享事件一樣,VB.NET 中的事件模型允許任何事件處理程序都可以處理來(lái)自多個(gè)控件的事件,這就允許創(chuàng)建屬于不同類型但共享相同事件的控件組。
所謂控件集合是指包含在一個(gè)容器中的所有控件的總和,能夠創(chuàng)建控件集合的容器有:Form、Panel、GropBox等。程序運(yùn)行時(shí),可以通過(guò)訪問(wèn)容器的Control屬性來(lái)得到該容器中的所有控件。
下面將演示如何通過(guò)控件集合來(lái)使用控件數(shù)組:
一、        直接使用Form容器的控件集合來(lái)使用控件數(shù)組:
建立一個(gè)VB.NET項(xiàng)目,在Form1中添加三個(gè)TextBox控件,名稱分別為:TextBox1、TextBox2、TextBox3,一個(gè)Button控件。
雙擊Button,輸入如下代碼:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ‘下面的語(yǔ)句是通過(guò)數(shù)組元素的下標(biāo)來(lái)訪問(wèn)Form中的每一個(gè)元素。
        Me.Controls.Item(0).Text = "集合中的第一個(gè)元素"
        Me.Controls.Item(1).Text = "集合中的第二個(gè)元素"
        Me.Controls.Item(2).Text = "集合中的第三個(gè)元素"
        Me.Controls.Item(3).Text = "集合中的第四個(gè)元素"
End Sub
運(yùn)行項(xiàng)目后,點(diǎn)擊Button,看到的結(jié)果是:Form1中的所有控件(包括Button自己)的Text屬性都被修改了,同時(shí)還發(fā)現(xiàn),最后加入的的控件變成了集合中的第一個(gè)元素(下標(biāo)為0)。這個(gè)結(jié)果說(shuō)明:
Form1中的所有控件已經(jīng)自動(dòng)構(gòu)成了一個(gè)控件集合(控件數(shù)組),這個(gè)特點(diǎn)使得建立控件數(shù)組變得非常簡(jiǎn)單。
在訪問(wèn)這些控件時(shí),除了可以通過(guò)控件名稱直接訪問(wèn)外,還可以通過(guò)Contro.Item(n)屬性按下標(biāo)訪問(wèn)集合中的每一個(gè)控件;
集合中控件的類型可以不相同,這點(diǎn)和VB6.0完全不同;
集合中的下標(biāo)順序是按照加入控件的順序倒排的;
VB.NET中控件數(shù)組的特點(diǎn)讓人稍感不適的是,控件數(shù)組的下標(biāo)是按加入順序的倒排續(xù)產(chǎn)生的,但程序員完全可以改變這個(gè)順序:在代碼編輯窗中點(diǎn)擊“#Region " Windows 窗體設(shè)計(jì)器生成的代碼”旁邊的“+”號(hào),代碼展開(kāi)后,找到如下代碼:
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.TextBox3)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.TextBox1)
這個(gè)代碼順序就是控件數(shù)組的下標(biāo)順序,只要改變這個(gè)順序就可以改變控件數(shù)組中每個(gè)以元素的下標(biāo)。
在Form中構(gòu)成控件數(shù)組非常方便,但也有一個(gè)小問(wèn)題:一般來(lái)說(shuō),F(xiàn)orm中的控件往往有很多種,系統(tǒng)建立控件集合的時(shí)候?qū)?huì)把其中的所有控件放在同一個(gè)集合中,這樣一來(lái),程序員在寫(xiě)代碼的時(shí)候有可能將每一個(gè)控件的下標(biāo)混淆,為了解決這個(gè)問(wèn)題,可以用Panel容器來(lái)根據(jù)需要將某類控件建立成控件數(shù)組,也就避免了上述問(wèn)題。
建立的方法非常簡(jiǎn)單:只需要在Form中添加一個(gè)Panel控件,然后將需要建立控件數(shù)組的控件加入其中即可,然后用:Panel.Control.Item(n)來(lái)訪問(wèn)其中的每一個(gè)控件。
二、        用代碼建立控件集合。
    建立一個(gè)VB.NET項(xiàng)目,在Form中添加三個(gè)TextBox和一個(gè)Button控件,在代碼編輯窗口中輸入如下代碼:
Dim TextboxArray As New ArrayList ‘定義一個(gè)數(shù)組例表
Private Sub BiuldTextBoxArray() ‘過(guò)程用來(lái)將Form上的三個(gè)TextBox加入到數(shù)組例表中
     TextboxArray.Add(TextBox1)
      TextboxArray.Add(TextBox2)
      TextboxArray.Add(TextBox3)
End Sub
‘讓Form在啟動(dòng)的時(shí)候?qū)⑷齻€(gè)TextBox控件加入到數(shù)組例表中,構(gòu)成控件數(shù)組。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    BiuldTextBoxArray()
End Sub
‘編寫(xiě)B(tài)utton點(diǎn)擊事件代碼,利用控件數(shù)組訪問(wèn)三個(gè)TextBox控件
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      TextboxArray(0).text = "文本框第一個(gè)元素"
      TextboxArray(1).text = "文本框第二個(gè)元素"
      TextboxArray(2).text = "文本框第三個(gè)元素"
End Sub
    運(yùn)行工程,點(diǎn)擊Button,發(fā)現(xiàn)三個(gè)TextBox都被修改了,效果和前面的方法一樣。
三、        在程序中動(dòng)態(tài)添加控件數(shù)組。
前面定義的控件數(shù)組都是在設(shè)計(jì)階段完成的,它要求,控件數(shù)組中的控件數(shù)量必須已知,也叫靜態(tài)控件數(shù)組;但很多時(shí)候要求,控件數(shù)組中的控件數(shù)量要用程序的某些運(yùn)行情況來(lái)確定,這就要求,控件數(shù)組中的控件要能實(shí)現(xiàn)動(dòng)態(tài)添加。
建立一個(gè)VB.NET工程,在Form上添加兩個(gè)Button,其中,Button1用來(lái)添加動(dòng)態(tài)控件數(shù)組;Button2用來(lái)修改數(shù)組中每個(gè)控件的屬性。
在代碼編輯窗口中輸入如下代碼:
Dim List As New ArrayList ‘定義一個(gè)例表對(duì)象,用來(lái)集合數(shù)組控件
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 ‘利用循環(huán)語(yǔ)句動(dòng)態(tài)加入控件數(shù)組。
        Dim FirstTextBox As New TextBox ‘定義文本框?qū)ο?br>        Me.Controls.Add(FirstTextBox) ‘將一個(gè)文本框控件加入到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 ‘修改默認(rèn)文本。
    Next
End Sub
用循環(huán)來(lái)訪問(wèn)動(dòng)態(tài)控件數(shù)組中的控件。
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 & " 個(gè)元素"
    Next
End Sub
運(yùn)行項(xiàng)目,先點(diǎn)擊Button1,F(xiàn)orm上將出現(xiàn)5個(gè)文本框,然后再點(diǎn)擊Button2,修改這五個(gè)文本框的Text屬性。
從這個(gè)實(shí)例看出,VB.NET中動(dòng)態(tài)加入控件數(shù)組與在VB6.0中實(shí)現(xiàn)動(dòng)態(tài)數(shù)組有一個(gè)顯著的不同:VB6.0中必須要有一個(gè)靜態(tài)的“控件種子”,而在VB.NET中已經(jīng)不需要了。
四、        控件數(shù)組的事件響應(yīng)。
控件數(shù)組的最重要的特色之一就是讓一組控件響應(yīng)同一個(gè)事件,在事件例程中接收控件具體某控件的Index值來(lái)分別處理處理具體問(wèn)題,這點(diǎn)已經(jīng)在VB6.0中表現(xiàn)得淋漓盡致了,它在VB.NET中同樣可以實(shí)現(xiàn),只不過(guò)實(shí)現(xiàn)方式有了變化。由于在容器中的每一個(gè)控件只要不作特殊處理,都會(huì)自動(dòng)構(gòu)成了控件集合,這樣,只要對(duì)原有的事件例程作少量修改,就可以非常方便的實(shí)現(xiàn)用一個(gè)事件例程響應(yīng)某個(gè)集合中所有控件產(chǎn)生的事件。
下面演示實(shí)現(xiàn)用同一個(gè)例程來(lái)處理兩個(gè)Button和一個(gè)TextBox發(fā)出的Click事件。
建立一個(gè)VB.NET項(xiàng)目,在Form上添加兩個(gè)Button,和一個(gè)TextBox。
在代碼編輯窗口中點(diǎn)擊“#Region " Windows 窗體設(shè)計(jì)器生成的代碼”旁邊的“+”號(hào),代碼展開(kāi)后,找到如下代碼并調(diào)整為下面的順序:
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("你點(diǎn)擊了 Button1 按鈕")
            Case 1
                MessageBox.Show("你點(diǎn)擊了 Button2 按鈕")
            Case 2
                MessageBox.Show("你點(diǎn)擊了 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 是一個(gè)自定義事件,在Handles后面的語(yǔ)句表示:該例程將響應(yīng)Button1, Button2, TextBox1控件發(fā)出的Click事件,如果還有其他控件,也可以放在后面,每一個(gè)控件名稱用“,”號(hào)隔開(kāi)。
運(yùn)行項(xiàng)目,分別點(diǎn)擊Form上面的三個(gè)控件就能體會(huì)到它的用法。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    中文字幕禁断介一区二区| 日本精品中文字幕在线视频| 99久久精品免费看国产高清| 国产欧美日韩精品一区二区| 日韩免费国产91在线| 欧美日韩精品久久第一页| 欧美激情区一区二区三区| 国产一级二级三级观看| 99国产高清不卡视频| 人体偷拍一区二区三区| 精产国品一二三区麻豆| 成人精品一级特黄大片| 国产日韩欧美综合视频| 亚洲欧美中文字幕精品| 91精品国产综合久久不卡| 激情三级在线观看视频| 色综合伊人天天综合网中文| 亚洲中文字幕综合网在线| 中文字幕一区二区三区大片| 日韩中文字幕视频在线高清版| 福利新区一区二区人口| 国产一级特黄在线观看| 97精品人妻一区二区三区麻豆| 午夜福利视频日本一区| 亚洲第一视频少妇人妻系列| 日韩性生活片免费观看| 欧美精品日韩精品一区| av一区二区三区天堂| 国产福利在线播放麻豆| 一区二区福利在线视频| 日本午夜福利视频免费观看| 国产视频一区二区三区四区| 亚洲av熟女国产一区二区三区站| 色一情一伦一区二区三| 国产一区二区三区av在线| 亚洲三级视频在线观看免费| 亚洲男人的天堂就去爱| 亚洲成人黄色一级大片| 老司机精品视频在线免费看| 亚洲精品中文字幕无限乱码| 午夜成年人黄片免费观看|