INDEX DE CONTROLES
Boa tarde pessoal,
No meu sistema em VB6 eu tinha uma tela com 26 botões, cada um representava uma letra do alfabeto, quando se clicava em algum deles, por exemplo na letra A, aparecia todos os cliente cujo nome começa com a letra A. Para isso os 26 botões tinha o mesmo nome e eu só mudava a propriedade INDEX deles, quando clicava em qualquer um, eles apontavam pra mesma SUB.
No vb 2010 eu já pesquisei e vi que infelizmente não existe mais a propriedade index em controles, para tentar sanar este problema eu fiz uma rotina assim:
Dim Nome As String = ([Ô]ABCDEFGHIJKLMNOPQRSTUVWXYZ.[Ô])
Dim Lef As Integer = 6
For I = 1 To 27
Dim NCom As New Button()
With NCom
.Text = Mid(Nome, I, 1)
.Location = New System.Drawing.Point(Lef, 52)
.Size = New System.Drawing.Size(20, 20)
End With
Lef = Lef + 20
me.Controls.Add(NCom)
Next I
dessa maneira eu criei os 26 botões na ordem, tamanho e lugares certo perfeitamente, como faço agora para que todos eles apontem para a mesma SUB ? ficou meio vaga esse idéia pra mim, pois por serem controles criados em tempo de execução eu não sei onde escrever o comando que eles vão executar dependendo de qual botão cliquei, e também não quero escrever o código em um por um, pois creio que deve haver uma maneira mais fácil e eu que não estou sabendo, como ficaria se eu tivesse 100 botões ? teria que programar um pr um ? achei muita bobeira eles tirarem o INDEX no vb.net.
Obrigado.
No meu sistema em VB6 eu tinha uma tela com 26 botões, cada um representava uma letra do alfabeto, quando se clicava em algum deles, por exemplo na letra A, aparecia todos os cliente cujo nome começa com a letra A. Para isso os 26 botões tinha o mesmo nome e eu só mudava a propriedade INDEX deles, quando clicava em qualquer um, eles apontavam pra mesma SUB.
No vb 2010 eu já pesquisei e vi que infelizmente não existe mais a propriedade index em controles, para tentar sanar este problema eu fiz uma rotina assim:
Dim Nome As String = ([Ô]ABCDEFGHIJKLMNOPQRSTUVWXYZ.[Ô])
Dim Lef As Integer = 6
For I = 1 To 27
Dim NCom As New Button()
With NCom
.Text = Mid(Nome, I, 1)
.Location = New System.Drawing.Point(Lef, 52)
.Size = New System.Drawing.Size(20, 20)
End With
Lef = Lef + 20
me.Controls.Add(NCom)
Next I
dessa maneira eu criei os 26 botões na ordem, tamanho e lugares certo perfeitamente, como faço agora para que todos eles apontem para a mesma SUB ? ficou meio vaga esse idéia pra mim, pois por serem controles criados em tempo de execução eu não sei onde escrever o comando que eles vão executar dependendo de qual botão cliquei, e também não quero escrever o código em um por um, pois creio que deve haver uma maneira mais fácil e eu que não estou sabendo, como ficaria se eu tivesse 100 botões ? teria que programar um pr um ? achei muita bobeira eles tirarem o INDEX no vb.net.
Obrigado.
Bom gente, pra quem um dia estiver nesta mesma situação, eu resolvi este problema fazendo o seguinte:
Private WithEvents NCom As New Button() [ô]DECLARADO NO FORMULÃRIO E NÃO NA ROTINA
Private Sub MontaBotoes() [ô]ESTA ROTINA CRIA 26 BOTÕES CADA UM COM UMA LETRA DO ALFABETO COMO TEXT
Dim Nome As String = ([Ô]ABCDEFGHIJKLMNOPQRSTUVWXYZ[Ô])
Dim Lef As Integer = 6
For I = 1 To 26
NCom = New Button
With NCom
.Text = Mid(Nome, I, 1)
.Size = New System.Drawing.Size(20, 20)
.Location = New System.Drawing.Point(Lef, 52)
AddHandler NCom.Click, AddressOf NCom_Click [ô]ISTO FAZ TODOS OS BOTÕES CHAMAREM O MESMO EVENTO NO CLICK
End With
Lef = Lef + 20
ME.Add(NCom)
Next I
End Sub
[ô]QUANDO CLICAR EM QUALQUER UM DOS BOTÕES CRIADOS, ELE VAI CHAMAR ESTE EVENTO
Private Sub NCom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NCom.Click
MsgBox(sender.text) [ô]MOSTRA A LETRA CLICADA
End Sub
E foi assim que eu consegui substituir a extinta propriedade Index dos controles no VB6 !
Private WithEvents NCom As New Button() [ô]DECLARADO NO FORMULÃRIO E NÃO NA ROTINA
Private Sub MontaBotoes() [ô]ESTA ROTINA CRIA 26 BOTÕES CADA UM COM UMA LETRA DO ALFABETO COMO TEXT
Dim Nome As String = ([Ô]ABCDEFGHIJKLMNOPQRSTUVWXYZ[Ô])
Dim Lef As Integer = 6
For I = 1 To 26
NCom = New Button
With NCom
.Text = Mid(Nome, I, 1)
.Size = New System.Drawing.Size(20, 20)
.Location = New System.Drawing.Point(Lef, 52)
AddHandler NCom.Click, AddressOf NCom_Click [ô]ISTO FAZ TODOS OS BOTÕES CHAMAREM O MESMO EVENTO NO CLICK
End With
Lef = Lef + 20
ME.Add(NCom)
Next I
End Sub
[ô]QUANDO CLICAR EM QUALQUER UM DOS BOTÕES CRIADOS, ELE VAI CHAMAR ESTE EVENTO
Private Sub NCom_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NCom.Click
MsgBox(sender.text) [ô]MOSTRA A LETRA CLICADA
End Sub
E foi assim que eu consegui substituir a extinta propriedade Index dos controles no VB6 !
Tópico encerrado , respostas não são mais permitidas