Ir para conteúdo
Fórum Script Brasil
  • 0

Controle criado em tempo de execução


alexandremanowar

Pergunta

E ae pessoal beleza

Estou trabalhando com visual basic .net 2005 com winform e é o seguinte eu criei um buttom em tempo de execução da seguintes forma:

Dim btnAlterar As New Button
  Dim LocalAlterar As New Point
  LocalAlterar.X = 6
  LocalAlterar.Y = 203

  Dim SizeAlterar As New Size
  SizeAlterar.Width = 187
  SizeAlterar.Height = 44

  btnAlterar.Size = SizeAlterar
  btnAlterar.Location = LocalAlterar
  btnAlterar.Text = "A&lterar"

  Me.GrupoAcesso.Controls.Add(btnAlterar)

esta funcionando na boa quando chega a parte do código que faz essa solicitação o botão aparece na tela, porém a minha dúvida é a seguinte, como eu coloco código dentro desse botão já que ele não esta diretemente dentro do form? Tenti criar um tipo de function mas não deu certo acho que estou no caminho errado. Alguém poderia me explicar como eu faço esse buttom executar alguma coisa quando eu clicar nele?

O método convencional:

Private Sub btnAlterar_Click((ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click

Não funciona pois como ele não existe diretamente no form ou seja não foi criado em tempo de designer o Handles não tem como funcionar.

Alguém sabe como isso deve ser feito?

Valeu a todos.

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

E ae beleza

Então cara legal funcionou valeu pela dica, porém estou tentando organixar melhor e estou tentando fazer o seguinte, estou tentando criar esses controles em tempo real dentro de uma class, aí o meiu form puxa lá de dentro e vai servir para outros forms, mas esta dando pau.

Olha como estou fazendo:

Essa é a class:

Imports System.Windows.Forms
Public Class Controles
    Public WithEvents btnAlterar As Button
   
    Public Sub CriaControles()
        btnAlterar = New Button
    End Sub
End Class
E dentro do form coloco assim:
Dim Botao As New Controles() 
  Botao.CriaControles() 
  Dim LocalAlterar As New Point
  LocalAlterar.X = 6
  LocalAlterar.Y = 203

  Dim SizeAlterar As New Size
  SizeAlterar.Width = 187
  SizeAlterar.Height = 44

  Botao.btnAlterar.Size = SizeAlterar
  Botao.btnAlterar.Location = LocalAlterar
  Botao.btnAlterar.Text = "A&lterar"

  Me.GrupoAcesso.Controls.Add(Botao.btnAlterar)

Porém o problema cai no mesmo do primeiro post, não consigo criar o método:

Private Sub btnAlterar_Click((ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Botao.btnAlterar.Click

Da erro no Handles e outroas coisas. Onde estou errando?

Link para o comentário
Compartilhar em outros sites

  • 0

Public Class Form1
    Dim WithEvents btnAlterar As New Button
    Dim LocalAlterar As New Point
    Dim SizeAlterar As New Size

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        LocalAlterar.X = 6
        LocalAlterar.Y = 203

        SizeAlterar.Width = 187
        SizeAlterar.Height = 44

        btnAlterar.Size = SizeAlterar
        btnAlterar.Location = LocalAlterar
        btnAlterar.Text = "A&lterar"

        Me.Controls.Add(btnAlterar)
    End Sub
    Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click
        MsgBox("botão funcionando")
    End Sub
End Class

olha, eu fiz um programinha teste desse jeito e funcionou normalmente.

Link para o comentário
Compartilhar em outros sites

  • 0

tenta então, declarar o btnAlterar como propriedade na sua classe. tipo assim:

Imports System.Windows.Forms
Public Class Controles
    Private b As Button
    Public ReadOnly Property btnAlterar()
        Get
            btnAlterar = b
        End Get
    End Property

    Public Sub CriaControles()
        b = New Button
    End Sub
End Class[/code] ai no form, como antes você declara o btnAlterar la em cima:
[code]Dim WithEvents btnAlterar As New Button
no Handle da sub, deixe só btnAlterar:
Private Sub btnAlterar_Click((ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAlterar.Click
ai na hora de adicionar o botao, ponha o botao da classe na variavel do form, tipo assim:
btnAlterar = Botao.btnAlterar
        Me.Controls.Add(btnAlterar)[/code]

veja se funciona ai.

Link para o comentário
Compartilhar em outros sites

  • 0
Você também pode usar a instrução AddHandler para associar o evento a uma rotina específica.

é...

é bem mais simples do q a gente tava fazendo antes... eu imaginava q tinha alguma coisa assim e fiquei desde q li o tópico tentando descobrir mas não consegui, q tristeza... no fim esse codigo q a gente conseguiu fazer acabou sendo mó gambiarra. com o AddHandler você faz em uma linha e pode fazer em qtos botoes quiser, qtos eventos quiser, não importa de onde teja vindo esse botao...

Link para o comentário
Compartilhar em outros sites

  • 0

pode ser no formulario. tipo você tem essa sub (pode ser sem o Handles mesmo):

Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
ai você declara um objeto EventHandler assim:
Dim x As New EventHandler(AddressOf btnAlterar_Click)
ai na hora de adicionar o botao você faz:
AddHandler Botao.btnAlterar, x
        Me.Controls.Add(Botao.btnAlterar)[/code]

assim você pode associar qtos botoes quiser a essa sub. ou qtas subs quiser ao evento click do botao, não importa qtos botoes você crie, ou em q momento você crie esse botao.

Link para o comentário
Compartilhar em outros sites

  • 0

Eae beleza

Legal cara entendi,

Aí no caso de eu querer declarar isso em uma class basta eu mudar isso

Private Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
para isso:
Public Sub btnAlterar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

E chamar no form conforme o restante que você me mostrou. Certo?

Isso é que chamo de mini tutorial, valeu mesmo esse tópico vai ser útil para muita gente.

Valeu mesmo cara.

Eu estou com um problema que estou travado a um tempo, consegui desenvolver um esquema para capturar uma webcam e tirar foto, postei aqui no fórum como se faz e tudo mas aí tentei mudar o esquema para funcionar melhor captutando várias webcams mas esta dando um erro de threading, procurei várias soluções mas não achei nada que me ajude.

O post da minha dúvida é esse:

Link do post

Então já resolvi quase tudo menos o problema dos threading dexei o código da versão que esta funcionando e a que estou melhorando.

Se você tiver alguma dica de como eu consigo arrumar esse problema e puder postar lá eu agradeço

Valeu

Editado por alexandremanowar
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...