Jump to content

Adicionar controlo


D3POD

Recommended Posts

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

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 by ribeiro55
Link to comment
Share on other sites

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 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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.