D3POD Posted June 18, 2012 at 11:40 AM Report Share #463630 Posted June 18, 2012 at 11:40 AM Boas, alguém me sabe explicar como posso adicionar um controlo novo no form utilizando botões? Queria utilizar um checkbox e ao selecionar vários então ele adicionava todos os selecionados mas o problema é mesmo como adicionar um 😛 Tenho procurado na internet mas os que encontro não tem explicação de como usar ou como funciona... Já testei e dão erro ao clicar no botão... Cumprimentos 😉 Link to comment Share on other sites More sharing options...
jlpcalado Posted June 18, 2012 at 02:33 PM Report Share #463659 Posted June 18, 2012 at 02:33 PM (edited) Envio este exemplo que adiciona 'buttons' ao form. Coloca um 'Button1' no topo esquerdo do form para correres o programa. Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim w As Integer = Me.Width Dim h As Integer = Me.Height Dim n As Decimal Dim k, l, t As Integer Randomize() k = CInt(Int((10 * Rnd()) + 1)) 'gera valores entre 1 e 10 Dim ct As Control For i = Me.Controls.Count - 1 To 0 Step -1 ct = Me.Controls(i) If TypeOf ct Is Button And ct.Name <> "Button1" Then Me.Controls.Remove(ct) 'apga control End If Next n = k / 3 If n > Int(n) Then n = Int(n) + 1 Dim pw As Integer = w / 3 Dim ph As Integer = h / n For i = 1 To k Dim b As New Button AddHandler b.Click, AddressOf MostraTextoControlo ' cria novo button com handler de evento b.Name = "btn" & i.ToString b.Text = "btn" & i.ToString b.Width = pw - pw * 0.15 b.Height = ph - ph * 0.15 l = i Mod 3 If l = 0 Then l = 3 b.Left = (pw / 2 - b.Width / 2) + pw * (l - 1) t = Int((i - 1) / 3) + 1 b.Top = (ph / 2 - b.Height / 2) + ph * (t - 1) + 5 Me.Controls.Add(b) ' ADICIONA O CONTROLO Next End Sub Private Sub MostraTextoControlo(ByVal sender As System.Object, ByVal e As System.EventArgs) MsgBox(sender.name) End Sub End Class Edited June 19, 2012 at 11:32 AM by ribeiro55 Link to comment Share on other sites More sharing options...
ribeiro55 Posted June 19, 2012 at 12:07 PM Report Share #463995 Posted June 19, 2012 at 12:07 PM (edited) Em traços simples, um "controlo" não é nada mais que uma instância de uma classe qualquer. Vamos lá dissecar isto objectivamente. Com algo tão simples como: Dim BT As New Button With {.Text = "O meu botão", .Size = New Size(100, 20), .Location = New Point(10, 10)} Já tens um botão 100x20, que será colocado em x=10 e y=10 do seu container, com o texto "O meu botão", em memória. Só precisas de colocar essa instância na colecção que "pinta os controlos", por assim dizer. Num form, basta adicionar essa instância à colecção Controls: Me.Controls.Add(BT) Só com isto, já vês o botão. Para que ele faça algua coisa, temos de colocar um "handler" num qualquer evento que ele dispare. Por exemplo, quando clicas em cima dele, internamente é disparado um evento chamado Click. Se estivermos à espera do disparo desse evento, podemos fazer alguma coisa. Para escutar o evento, com um endereço (sem ser inline, que pode ser confuso) basta: AddHandler BT.Click, AddressOf ClicouNoBotao Isto está basicamente a dizer: Pá, cria aí uma cena que chame o ClicouNoBotao quando o objecto BT gritar CLICK. Agora só precisas de definir o alvo do endereçamento. Tens de criar o método ClicouNoBotao com a assinatura levantada por o evento Click. A assinatura levantada implica um Object e um EventArgs, que no caso do click o object representa o botão que disparou o evento (para conseguires discernir de onde veio, se utilizares o mesmo handler para vários) Nesse método, acrescentas a lógica que pretendes. Posso adiantar-te já um bloco com o disparador: Private Sub ClicouNoBotao(disparador As Object, evargs As EventArgs) Dim BotaoEmQuestao As Button = DirectCast(disparador, Button) MessageBox.Show( String.Format("Olá. Tenho escrito '{0}' e estou localizado em x={1} e y={2}", BotaoEmQuestao.Text, BotaoEmQuestao.Location.X, BotaoEmQuestao.Location.Y)) End Sub Se acompanhares a lógica, rapidamente te apercebes que podias criar 100000 botões, todos com o mesmo handler, e todos "respondiam por si". Edited June 19, 2012 at 12:09 PM by ribeiro55 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now