我知道控制数组实际上不再存在,但我需要一些与代码相关的东西。我正在制作一个购物清单游戏,其中包含32个瓷砖的网格,点击时会翻转。它们实际上是PictureBoxes,名为pbxTile1 - pbxTile32。我觉得你已经知道我要说什么了。
我的代码示例:
Private Sub pbxTile1_Click(sender As Object, e As EventArgs) Handles pbxTile1.Click
If TileFlag(1) = 0 Then Exit Sub
My.Computer.Audio.Play(My.Resources.Tile_Flip, AudioPlayMode.Background) : Application.DoEvents()
Me.pbxTile1.BackgroundImageLayout = ImageLayout.Stretch
Me.pbxTile1.BackgroundImage = My.Resources.FLIP01 : Application.DoEvents() : System.Threading.Thread.Sleep(50)
Me.pbxTile1.BackgroundImage = My.Resources.FLIP02 : Application.DoEvents() : System.Threading.Thread.Sleep(50)
Me.pbxTile1.BackgroundImage = My.Resources.FLIP03 : Application.DoEvents() : System.Threading.Thread.Sleep(50)
Dim GroceryValue = TileItem(1)
Call Get_Grocery(GroceryValue)
Me.pbxTile1.BackgroundImageLayout = ImageLayout.None
Me.pbxTile1.BackgroundImage = My.Resources.ResourceManager.GetObject(GroceryResource) : Application.DoEvents()
你可以看到我的问题 - 这是子程序的一小部分,我需要重新创建32次。但是我相信你们其中一个聪明的小伙伴们可以拿出一些东西来减轻我的痛苦!我已经看过标记,列表和索引 - 但不知道如何应用它,这是最好的,需要一些例子!
答案 0 :(得分:0)
没关系,我找到了!我的话完美无缺:
我没有意识到事件处理程序可以处理多个控件!
而不是重复我的代码(32次!)我只是将Sub改为:
Private Sub pbxTile_Click(ByVal sender As Object, e As System.EventArgs) Handles pbxTile1.Click, pbxTile2.Click, pbxTile3.Click, pbxTile4.Click, pbxTile5.Click, pbxTile6.Click, _
pbxTile7.Click, pbxTile8.Click, pbxTile9.Click, pbxTile10.Click, pbxTile11.Click, pbxTile12.Click, pbxTile13.Click, pbxTile14.Click, pbxTile15.Click, pbxTile16.Click, _
pbxTile17.Click, pbxTile18.Click, pbxTile19.Click, pbxTile20.Click, pbxTile21.Click, pbxTile22.Click, pbxTile23.Click, pbxTile24.Click, pbxTile25.Click, pbxTile26.Click, _
pbxTile27.Click, pbxTile28.Click, pbxTile29.Click, pbxTile30.Click, pbxTile31.Click, pbxTile32.Click
所以基本上如果单击32个框中的任何一个,它会调用相同的Sub。并区分每个PictureBox(这是我真正坚持的位)我使用DirectCast:
For z = 1 To 32
If DirectCast(sender, PictureBox).Name = "pbxTile" & z And TileFlag(z) = 0 Then Exit Sub
Next
我不确定这是否是最简化的方式,但它确实有效,并为我节省了一堆我不需要的代码!