作者cole945 (躂躂..)
看板Visual_Basic
标题Re: [.NET] 可以使用回圈控制物件吗?
时间Fri Jun 22 23:17:11 2007
既然是在讲2005..所以我就把标题换成 .NET 了~
※ 引述《finch319 (Finch)》之铭言:
: 我有一个很类似的问题
: 只是我的环境是Visual Basic 2005的
: 我的程式是有9x9共81个Button
: 名称是Button00、Button01...Button88
: : vb6本来就可以把控制项开成阵列~
: : 你只要把 Name 设成一样, 他就会问你要不要建立阵列~
: : 然後你就可以用 For 来跑这些 Lables
: : (vb6会自己帮你设Index,你也可以在属性修改)
: : ' 用起来会像这样, 这是一个 Label1 的阵列
: : For i = 0 To Label1.Count - 1
: : Label1(i).Caption = 1
: : Next i
要达到这个目的方法有很多..
看你自己适合用哪一个..
比较简单(但比较没效率的法)
Me.Controls("Button00")
这样就可以把 Button00 取出来了. 老话一句, 注意取出来的东西是 Control,
如果你只要操作他 Control 部份的特性 (像Text,Height,Top等等)
那就不用转型了, 如果是要操作Button特有的方法属性等等, 那要用CType转型
(依情况你还会需要判断是不是 Nothing, 因为Button??可能不存在)
这个方法衍生出来的另一个问题是, 怎麽用for-loop造出
"Botton00" 这个字串, 因为 "Button" & 0 是变成 "Button0"
这个可以用 String.Format("Button{0:00}", i) 来让i不足两位时补0
: 请问上面这个功能在2005有办法用吗
: 我把Button的名字设成一样
: 会出现"无效的属性值。"对话框
到从2002开始就不能直接从Designer把控制项设成同名来自动建立成阵列了..
比较容易的作法就是上面讲的方法, 如果你熟悉 Array或List的话,
我会建议你用自己手动动态产生Button阵列自己手动放到 Form 上面
如果你的 Button的个数是静态的(不会或不常新增移除)
那建议你用 Array, 反之建议用 List
先宣告一个类别成员
Dim Buttons(81-1) as Buttons ' 用这个arrary存放你的buttons
' 在Form_Load或你想要的地方初始这81个 button
' 这段程式会在form上整齐放上81个button
for i = 0 to Buttons.Length - 1
Buttons(i) = new Button()
With Buttons(i)
.Height = 20 ' 高
.Width = 20 ' 宽
.Top = (i mod 9) * 20 ' 上y
.Left = (i \ 9) * 0 ' 左x
.Text = i
End With
Me.Controls(Buttons(i)) ' 把这个Button放到你的 Form 上
Nexi
之後你要处理这81个button时, 就用像上面loop的方式处理他们
如果你要用List的方式作, 请自行参考如果使用 ArrayList
如果都觉得太麻烦, 也可以直接把 Form 上的 Controls全部弄出来,
再自行判断是不是你要的Button
看你要用
for i = 0 to Controls.Length-1
'Controls(i) ????
Next
还是
foreach c as Control in Controls
' c??
Next
然後你可以用 typeof c is Button 来判断c这个control是不是button
或用 c.Name 是不是 Button?? 再把他CType成Button去处理
: 我是希望能够透过阵列来更改这些Button的Image属性
: 不知道有没有办法做到?
: 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.138.216.17
1F:推 finch319:感谢您的说明,我会再试试看的 06/22 23:41
2F:推 fumizuki:foreach 应该是 For Each 有空格才对? 06/24 10:16