在我的VB解决方案中,我有很多按钮排列在网格中。加载程序时,其中一个按钮被随机设置为正确的按钮(您必须单击该按钮才能获胜)。任何人都可以指出我正确的方向吗?因为必须有一种比手动编码每个按钮更好的方法,并为每个按钮创建一个事件处理程序。
你不必给我一个有效的例子,只是对如何做到这一点有一个全面的了解。
感谢。
答案 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