Visual Basic 2008 массивы управления
Я смотрю на управление свойствами массива кнопок в VB 2008 (экспресс). Я смотрел на пример кода из белой книги в MS, и это отчасти заставляет мою голову крутиться по сравнению с тем, что было сделано в VB6! (и да, я любитель, поэтому, пожалуйста, простите за плохое кодирование и, возможно, за простой вопрос для опытных здесь...)
Если я правильно читаю, правильный способ сделать это сейчас - создать отдельный класс, создать конструкторы и т. Д. Для этого класса, а затем создать его экземпляр в проекте?
Я пытаюсь использовать относительно простой массив, как это:
'Create buttons
'Dim btn(30) As Button
'For i As Integer = 0 To 29
' btn(i) = New Button()
' btn(i).Width = 100
' btn(i).Height = 30
' btn(i).Text = i + 1
' btn(0).Left = 120
' btn(0).Top = 100
' If i >= 1 And i <= 14 Then
' btn(i).Left = 120
' btn(i).Top = btn(0).Top + (i * 30)
' End If
' If i = 15 Then
' btn(15).Left = 235
' btn(15).Top = 100
' End If
' If i >= 16 And i <= 29 Then
' btn(i).Left = 235
' btn(i).Top = btn(0).Top + ((i Mod 15) * 30)
' End If
' Me.Controls.Add(btn(i))
'Next
Если я добавлю его в метод загрузки, то я не смогу получить к нему доступ с помощью другой кнопки, потому что я думаю, что он находится в закрытой подпрограмме, когда этот фрагмент находится в подпрограмме загрузки? Есть ли простой способ просто иметь этот код, чтобы массив btn(i) был доступен из других функций в форме?
1 ответ
Вам нужно сделать массив кнопок полем или свойством в классе, а не в методе load.
Самый простой способ - просто переместить Dim btn(30) As Button
объявление метода load в классе (вставьте его в строку над методом load), и все готово.
Кто-то может поспорить о стандартах кодирования и прочем - но я думаю, что это заставит вас работать (-:
Хорошо, далее к вышеупомянутому и вашему комментарию, достаточно кода, чтобы проиллюстрировать то, что я пытался объяснить. Этот код скомпилирует и запустит массив кнопок, доступный из двух методов в классе формы:
Public Class Form1
Dim btn(30) As Button
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To 29
btn(i) = New Button
Next
End Sub
Private Sub DoSomethingElse()
For i As Integer = 0 To 29
btn(i).Text = String.Format("{0}", i + 1)
Next
End Sub
End Class