私の VB ソリューションでは、多数のボタンがグリッドに配置されています。プログラムが読み込まれると、ボタンの 1 つがランダムに正しいものに設定されます (勝つにはそのボタンをクリックする必要があります)。誰かが私を正しい方向に向けることができますか? すべてのボタンを手動でコーディングし、すべてのボタンのイベント ハンドラーを作成するよりも優れた方法があるはずです。
実際の例を示す必要はありません。これがどのように行われるかについての全体的なアイデアだけです。
ありがとう。
私の VB ソリューションでは、多数のボタンがグリッドに配置されています。プログラムが読み込まれると、ボタンの 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
最初に、ボタンのグリッドが必要だと言ったので、FlowLayoutPanel
追加するボタンを自動的に配置できるようにするために、フォームにコントロールが必要です。次に、前に追加した 'FlowLayoutPanel' に追加するボタンを追加するために、for ループ、r あらゆる種類の外観を使用する必要があります。class Answers Dim strAnswerText as string Dim AnswerFlag as Boolean End Class
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