none
Criar Classe BOTAO que cria um botão (dinamicamente) RRS feed

  • 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

    terça-feira, 18 de dezembro de 2012 00:42

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
    terça-feira, 18 de dezembro de 2012 18:53

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

    terça-feira, 18 de dezembro de 2012 12:01
  • 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

    Gerenciador de Logins

    terça-feira, 18 de dezembro de 2012 15:04
  • 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
    terça-feira, 18 de dezembro de 2012 17:57
  • 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
    terça-feira, 18 de dezembro de 2012 18:53