Usuário com melhor resposta
Criar Classe BOTAO que cria um botão (dinamicamente)

Pergunta
-
Olá, gostaria de saber como faço pra criar uma classe BOTAO que tenha um método (função) que cria um botão dinamicamente.
Eu tentei o seguinte:
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim objBotoes As New b() End Sub End Class Public Class b Inherits System.Windows.Forms.Button Dim botao As Button Dim intIndice As Integer Dim intY As Integer = 10 Private Sub b_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) botao = New Button With botao intY += 30 .Name = "botao" & intIndice.ToString .Text = "Nome do Botão: " & .Name .AutoSize = True .Location = New Point(10, intY) End With AddHandler botao.Click, AddressOf Botoes_Click Me.Controls.Add(botao) End Sub Private Sub Botoes_Click(ByVal sender As Button, ByVal e As EventArgs) MessageBox.Show("Você pressionou o botão " & sender.Name.ToString) End Sub End Class
Respostas
-
SOLUCIONADO !!!
Então o código ficou como: Uma Estrutura que guarda: *um Botão; * e informações específicas desse botão (no caso eu só postei aqui UMA das informações específicas - o ID)
Public Class Form1 Public Est(4) As Estrutura Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim B() As Button = Nothing Dim i As Integer Dim Y As Integer = 10 For i = 0 To 4 Est(i) = New Estrutura() Next For i = 0 To 4 ReDim Preserve B(i) B(i) = New Button With B(i) Y += 50 .Name = i.ToString .Text = .Name .AutoSize = True .Location = New Point(10, Y) End With AddHandler B(i).Click, AddressOf Botoes_Click Me.Controls.Add(B(i)) Est(i).Inicializa(i, B(i)) Next Est(2).Mostra() End Sub Private Sub Botoes_Click(ByVal sender As Button, ByVal e As EventArgs) MessageBox.Show("Você pressionou o botão: " & sender.Name.ToString) End Sub End Class Public Class Estrutura Dim ID As Integer Dim B As Button Public Sub Inicializa(ByVal i As Integer, ByVal button As Button) ID = i B = button End Sub Public Sub Mostra() MsgBox(ID) MsgBox(B.Name) End Sub End Class
obrigado
- Editado xxxagilianxxx terça-feira, 18 de dezembro de 2012 18:55
- Marcado como Resposta xxxagilianxxx terça-feira, 18 de dezembro de 2012 18:55
Todas as Respostas
-
Não entendi, você quer criar um método dentro da classe botão que cria um botão? Não seria mais interessante instanciar sua classe criada passando os parâmetros desse novo botão?
Thiago Coelho - Líder das Comunidades .NET Coders e Windows 8 Brasil
thiagocoelho.net | @thiagokoelho -
Não seria mais fácil criar uma função estática para fazer isso. Adicione um Módulo(Module) ao seu projeto e faça assim (só um exemplo):
Module BotaoDinamico Public Shared Function CriarBotao(Form as Form) as Button 'Seu código aqui... 'o parametro form vai ser o form onde você quer adicionar seu botão End Function End Module
Herbert Lausmann
-
Mudei meu modo de pensar então... Considere o seguinte:
Criei um monte de botões ... e em seguida joguei esses botões dentro da minha Classe "Estrutura".
Public Class Form1 Public Est As New Estrutura Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim B() As Button = Nothing Dim i As Integer Dim Y As Integer = 10 For i = 0 To 4 ReDim Preserve B(i) B(i) = New Button With B(i) Y += 50 .Name = i.ToString .Text = .Name .Location = New Point(10, Y) End With AddHandler B(i).Click, AddressOf Botoes_Click Me.Controls.Add(B(i)) Est.Inicializa(i, B(i)) Next Est.Mostra() End Sub Private Sub Botoes_Click(ByVal sender As Button, ByVal e As EventArgs) MessageBox.Show("Você pressionou o botão: " & sender.Name.ToString) End Sub End Class Public Class Estrutura Dim ID As Integer Dim B As Button Public Sub Inicializa(ByVal i As Integer, ByVal button As Button) ID = i B = button End Sub Public Sub Mostra() MsgBox(ID) MsgBox(B.Name) End Sub End Class
...
Esse código funcionou .... mas agora pra ele ser aplicável no meu programa, o objeto "Est" do tipo "Estrutura" precisaria ser um Array, ou seja, "Est( )".
Como eu declaro "Est" como array ???????
- Editado xxxagilianxxx terça-feira, 18 de dezembro de 2012 18:06
-
SOLUCIONADO !!!
Então o código ficou como: Uma Estrutura que guarda: *um Botão; * e informações específicas desse botão (no caso eu só postei aqui UMA das informações específicas - o ID)
Public Class Form1 Public Est(4) As Estrutura Public Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim B() As Button = Nothing Dim i As Integer Dim Y As Integer = 10 For i = 0 To 4 Est(i) = New Estrutura() Next For i = 0 To 4 ReDim Preserve B(i) B(i) = New Button With B(i) Y += 50 .Name = i.ToString .Text = .Name .AutoSize = True .Location = New Point(10, Y) End With AddHandler B(i).Click, AddressOf Botoes_Click Me.Controls.Add(B(i)) Est(i).Inicializa(i, B(i)) Next Est(2).Mostra() End Sub Private Sub Botoes_Click(ByVal sender As Button, ByVal e As EventArgs) MessageBox.Show("Você pressionou o botão: " & sender.Name.ToString) End Sub End Class Public Class Estrutura Dim ID As Integer Dim B As Button Public Sub Inicializa(ByVal i As Integer, ByVal button As Button) ID = i B = button End Sub Public Sub Mostra() MsgBox(ID) MsgBox(B.Name) End Sub End Class
obrigado
- Editado xxxagilianxxx terça-feira, 18 de dezembro de 2012 18:55
- Marcado como Resposta xxxagilianxxx terça-feira, 18 de dezembro de 2012 18:55