简单的VB,处理许多按钮

时间:2012-12-24 12:17:03

标签: vb.net events button event-handling

在我的VB解决方案中,我有很多按钮排列在网格中。加载程序时,其中一个按钮被随机设置为正确的按钮(您必须单击该按钮才能获胜)。任何人都可以指出我正确的方向吗?因为必须有一种比手动编码每个按钮更好的方法,并为每个按钮创建一个事件处理程序。

你不必给我一个有效的例子,只是对如何做到这一点有一个全面的了解。

感谢。

2 个答案:

答案 0 :(得分:1)

首先,你说你想要一个按钮网格,所以你必须在表单中有一个FlowLayoutPanel控件,以便让你想要添加的按钮自动排列。 其次,你必须使用for循环,任何类型的外观,以添加要添加到以前添加的'FlowLayoutPanel'的按钮。     类答案         将strAnswerText变暗为字符串         Dim AnswerFlag as Boolean     结束班

Sub LoadForm(byval a_Answers as Answer())        
    Dim i as Integer = 0
    Dim b as Button 
    For(i=0;i<NUM_OF_BUTTONS;i++)
       b = New Button()
       b.Text = "Choice -" & i & "- " & a_Answers(i).strAnswerText 
       b.Tag = a_Answers(i).AnswerFlag

       'Supposing that the FlowLayoutPanel control name is fl
       AddHandler b.Click, Addressof Clicked
       fl.controls.Add(b)   
    End For 
End Sub

Sub Button Clicked(sender as object, e as EventArgs)
    if sender.Tag = True
       'True answer
    else
       'Wrong answer
    end if

End Sub

答案 1 :(得分:1)

如果要在网格中排列按钮,请使用TableLayoutPanel或直接将按钮添加到表单并计算其位置。如果您想在表单调整大小时自动排列按钮,TableLayoutPanel非常有用,否则直接添加按钮对我来说就更容易了。

将按钮添加到在表单级别定义的数组,以便于访问

Public Const NColumns As Integer = 5, NRows As Integer = 4

Private buttons As Button(,) = New Button(NColumns - 1, NRows - 1) {}

您可以在循环中轻松添加按钮

For ix As Integer = 0 To NColumns - 1
    For iy As Integer = 0 To NRows - 1
        Dim btn = New Button()
        btn.Text = String.Format("{0:d2}{1:d2}", ix, iy)
        btn.Location = New Point(leftMargin + ix * xDistance,
                                 topMargin + iy * yDistance)
        btn.Size = New Size(buttonWidth, buttonHeight)
        AddHandler btn.Click, Addressof Button_Clicked
        buttons(ix, iy) = btn
        Controls.Add(btn)   
    Next
Next

您可以使用随机生成器确定获胜按钮。将其定义为表单成员,而不是局部变量。

Private randomGenrator As System.Random = New System.Random()

确定坐标

Dim xWins = randomGenrator.Next(NColumns) 'Returns a number between 0 and NColumns-1
Dim yWins = randomGenrator.Next(NRows)

点击处理程序如下所示

Private Sub Button Button_Clicked(sender As Object, e As EventArgs)
    If sender = buttons(xWins, yWins) Then
       'You win
    Else
       'You loose
    End
End Sub