Visual Basic 2008 Control Arrays
-
21-09-2019 - |
Pergunta
Estou olhando para controlar as propriedades de uma variedade de botões no VB 2008 (Express). Eu tenho olhado para o código de amostra de um whitepaper no MS, e isso meio que faz minha cabeça girar em comparação com o que foi feito no VB6! (E sim, eu sou um amador, então perdoe a pobre codificação e o que provavelmente é uma pergunta simples para os experientes aqui ...)
Se estou lendo corretamente, a maneira correta de fazê -lo agora é criar uma classe separada, criar construtores etc. para essa classe e instanciá -la no projeto?
Estou tentando usar uma matriz relativamente simples como esta:
'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
Se eu o colocar no método de carga, não posso acessá -lo de outro botão, porque acho que está em uma sub -rotina privada quando esse snippet está na sub -rotina de carga? Existe uma maneira simples de apenas ter esse código para que a matriz BTN (i) seja acessível a partir de outras funções no formulário?
Solução
Você precisa fazer da matriz de botões um campo ou uma propriedade na classe, e não no método de carga.
Maneira mais fácil é apenas mover o Dim btn(30) As Button
Declaração fora do método de carga na classe (coloque -a na linha acima do método de carga) e você terminou.
Pode -se discutir sobre padrões e outras coisas de codificação - mas acho que isso vai fazer você trabalhar ( -:
Ok, mais adiante e seu comentário, código suficiente para ilustrar o que eu estava tentando explicar. Este código compilará e executará - a matriz de botões acessível a partir de dois métodos dentro da classe de formulário:
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