У меня есть строковый массив Globals.stringArray
, который заполняет список элементов управления в зависимости от количества записей в массиве. Я хочу отслеживать, сколько раз используется элемент управления (например, нажатие кнопки) с целым числом, которое я буду использовать и отображать позднее.Как создавать переменные динамически на основе массива строк?
Я предполагаю, что требуется динамически созданная глобальная переменная в зависимости от того, сколько элементов управления создано (в зависимости от количества элементов в массиве строк).
Во-вторых, как бы я это сделал и как бы получить доступ к этим переменным впоследствии?
Вот что у меня есть:
Public Shared Sub dynamicVariables()
Dim variables As New Dictionary(Of String, Integer)()
variables("MyDynamicVariable") = Globals.stringArray.Length
End Sub
Я предполагаю, что я могу добавить dynamicVariables()
в котором создаются мои кнопки, чтобы запустить его в сочетании с этим и сопоставить переменные с кнопками?
EDIT: (с предложениями)
Public Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddNewButton()
End Sub
Public Sub AddNewButton()
Dim buttonTop As Integer = 100
For Each item As String In Globals.candidates
Dim btn As New System.Windows.Forms.Button()
Dim Location As New Point(100, (buttonTop + 20))
btn.Location = Location
btn.Text = item
btn.Width = 150
AddHandler btn.Click, AddressOf Me.buttonClick
Me.Controls.Add(btn)
buttonTop += 20
Next
End Sub
Private Sub buttonClick(sender As Object, e As EventArgs)
Dim btn As Button = DirectCast(sender, System.Windows.Forms.Button)
Dim result As Integer = MessageBox.Show(String.Format("Did you select {0} ?", btn.Text), "Confirmation", MessageBoxButtons.YesNo)
If result = DialogResult.Yes Then
Dim usage As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
If usage.ContainsKey("myButtonName") Then
usage("myButtonName") += 1
Else
usage.Add("myButtonName", 1)
End If
Else
MessageBox.Show("No pressed")
End If
End Sub
End Class
EDIT 2: (с предложениями)
Public Class Form2
Private Sub From2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
AddNewButton()
End Sub
Public Sub AddNewButton()
Dim buttonTop As Integer = 100
For Each item As String In Globals.candidates
Dim btn As New System.Windows.Forms.Button()
Dim Location As New Point(100, (buttonTop + 20))
btn.Location = Location
btn.Text = item
btn.Width = 150
AddHandler btn.Click, AddressOf Me.buttonClick
AddHandler btn.Click, AddressOf Me.ClickCounter
Me.Controls.Add(btn)
buttonTop += 20
Next
End Sub
Private Sub buttonClick(sender As Object, e As EventArgs)
Dim btn As Button = DirectCast(sender, System.Windows.Forms.Button)
Dim result As Integer = MessageBox.Show(String.Format("Did you select {0} ?", btn.Text), "Confirmation", MessageBoxButtons.YesNo)
If result = DialogResult.Yes Then
'Yes clicked. Add 1 to counter and show next screen. ???
Else
'No clicked. Return to screen to make proper selection.
End If
End Sub
Private Sub ClickCounter(sender As Object, e As EventArgs)
Dim btn As Button = TryCast(sender, Button)
Dim usage As Dictionary(Of String, Integer) = New Dictionary(Of String, Integer)
If btn Is Nothing Then Return
If Not usage.ContainsKey(btn.Name) Then
usage.Add(btn.Name, 0)
usage(btn.Name) += 1
End If
End Sub
End Class
Это приложение для веб-приложений или окон? – Yatrix
winforms, я добавил тэг – user3029953