首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

vb.net里如何把一组控件像vb那样以控件数组的方式操作

2011-12-19 
vb.net里怎么把一组控件像vb那样以控件数组的方式操作?我一个窗体中有30个label,从label1----label30,现在

vb.net里怎么把一组控件像vb那样以控件数组的方式操作?
我一个窗体中有30个label,从   label1   ----   label30,   现在要给它们赋值,请问下这个该怎么写?

不要一个个的       label1.text= "... "
                              label2.text= "... "

能不能像   vb   里面的控件数组那样,用个for循环搞定?   右边是一组数组   strFieldsCaption(29)

我用过             Dim   i   As   Integer
                        Dim   Mylabel()   As   Label
                        ReDim   Mylabel(29)
                        For   i   =   1   To   29
                                Mylabel(i)   =   New   Label
                                Mylabel(i).Name   =   "label "   &   i
                                Mylabel(i).Text   =   strFieldsCaption(i   )  
                        Next   i
啥反映都没有!

在线等。。。



[解决办法]
沒有
但可變通

Sub FocusMoveTextBox(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Text1.KeyPress, Text2.KeyPress, Text3.KeyPress, Text4.KeyPress, Text5.KeyPress
If e.KeyChar = ChrW(13) Then
Select Case CType(sender, TextBox).Name
Case "Text1 "
Case "Text2 "
Case "Text3 "
Case "Text4 "
Case "Text5 "
End Select
End If
End Sub
[解决办法]
为什么不可以呢,没把他们添加进control里面当然看不到了:

.........................
me.controls.add(Mylabel(i))
Next i

还有就是location属性也要设置的,否则都叠在一起了,视觉上看到的只有一个,看下面这段代码:
Dim i As Integer

For i = 0 To 12
Key(i) = New Ext_Button
Key(i).Size = New Size(24, 24)
Key(i).Location = New Point(i * 24, 0)
Key(i).Text = " "
Key(i).BackgroundImage = My.Resources.ResourceManager.GetObject( "N " & i.ToString( "D2 "))
Key(i).NormalText = KeyCharNormal(i)
Key(i).ShiftText = KeyCharShift(i)
AddHandler Key(i).MouseDown, AddressOf Me.iKeyPress
Me.Controls.Add(Key(i))
Next


[解决办法]
Private BittonArray(5, 6) As Object

BittonArray(0, 0) = Me.CenderButton1
BittonArray(0, 1) = Me.CenderButton2
BittonArray(0, 2) = Me.CenderButton3
BittonArray(0, 3) = Me.CenderButton4
……
[解决办法]
vb.net本身并不提供控件数组,网上有折衷解决的方案不知对你是否有帮助http://www.5iaspx.com/aspnet/Zai-Visual-Basic-NET-ChuangJianKongJianShuQu-2fa70189.html

根据lfywyq()的方法,可以这样实现,继承自control的控件都有个Tag属性,可以用来保存特定数据,可以通过遍历control的时候判断其是否为想修改的控件。代码如下:



Dim i As Integer = 0
For Each aa As Control In Controls
If aa.Tag = "change1 " Then
aa.Text = i
i += 1
End If
Next

[解决办法]
Dim i as integer=1
For each ctr as Control In Me.Controls
If ctr.GetType().Name= "Label " Then
CType(ctr,Label).Text= "Label " & CStr(i)
i+=1
End if
End For
[解决办法]
控件数组在VBNET中不能像VB6中那样创建,只能用代码动态创建

如果手动创建了30个label,如 label1-label30,你先用对像数组指向,然后引用对像数组
如dim ObjLabel(31) as object
ObjLabel(1)=label1
ObjLabel(2)=label2
.....
ObjLabel(30)=label30
引用:
for i=1 to 30
ObjLabel(1).text= "第 " & cstr(i) & "个 "
....
next

如果用代码动态创建,如
Dim i As Integer
Dim Mylabel() As Label
ReDim Mylabel(29)
For i = 1 To 29
Mylabel(i) = New Label
Mylabel(i).location=new point( 20 ,30*i) '一定要,不然叠在一起
Mylabel(i).Name = "label " & i
Mylabel(i).Text = strFieldsCaption(i )
me.controls.add(Mylabel(i)) '一定要,不然看不到呵
Next i
引用就不有说了


另:也都可以用for each 列举,如果你喜欢


[解决办法]
先定义一个数组,然后给数组元素赋值
Public coln(30) As System.Windows.Forms.Control
coln(0) = fm.lblCol0
coln(1) = fm.lblCol0
coln(2) = fm.lblCol1
coln(3) = fm.lblCol2
coln(4) = fm.lblCol3
......

控件的赋值如下:
For i = 0 To xxxx
coln(m).Text = Format(i, "00 ")
m = m + 1
Next i
[解决办法]
先建一个这样的类
Public Class LabelCollection : Implements IEnumerable
Private c As New Collection()

Public Sub Add(ByVal l As Label )
c.Add(l)
End Sub

Public Sub Remove(ByVal l As Label)
Dim itemCount As Integer
For itemCount = 1 To c.Count
If l Is c.Item(itemCount) Then
c.Remove(itemCount)
Exit For
End If
Next
End Sub

Public ReadOnly Property Item(ByVal index As Integer) As Label
Get
Return CType(c.Item(index), Label)
End Get
End Property

Public ReadOnly Property Count() As Integer
Get
Return c.Count
End Get
End Property

Overridable Function GetEnumerator() As _
IEnumerator Implements IEnumerable.GetEnumerator
Return c.GetEnumerator
End Function
End Class

窗体Load的时候把你的控件一个一个的添加进去

这样在程序里就可以用For Each来循环了
[解决办法]
你还不如这样
Private Sub SetText(ByVal ParamArray args() As Windows.Forms.Label)
Dim lbl As Windows.Forms.Label
For Each lbl In args
lbl.Text = "... "
Next
End Sub

Settext( label1, label2, ..., label30 )

热点排行