VB.NET - Criando controles em tempo de execução com WinForms


O Visual Basic.NET fornece muitos controles visuais que podemos usar em uma aplicação WinForms.(veja artigo VB.NET - Windows Forms).  Podemos inserir e configurar os controles em tempo de desenho ou em tempo de execução via código.

Neste artigo vou mostrar como incluir e configurar alguns controles via código em tempo de execução em uma aplicação WinForms. (Eu estarei usando o Visual Studio.Net versão beta 2 )

Vamos incluir e configurar os seguintes controles :  TextBox , Button , ListBox , CheckBox e Label.

Criando uma aplicação Windows Forms

  1. Inicie o Visual Studio .NET e crie um novo projeto do tipo WinForms com o nome de WinControles.
  2. Clique duas vezes no formulário padrão - form1.vb - e veja o código do procedimento Form1_Load
  3. Na primeira linha de Form1.vb inclua uma referência ao Namespace Color antes da definição da classe Form1 com a seguinte linha de código :  Imports System.Drawing.Color

  1. A seguir insira instâncias privadas das variáveis a classe Form1 para trabalhar com os controles que vamos incluir usando o seguinte código :

Private txtBox As New TextBox()

Private btnAdd As New Button()

Private lstBox As New ListBox()

Private chkBox As New CheckBox()

Private lblCount As New Label()

  1. Vamos agora mostrar o código que irá criar os controles em tempo de execução. No evento Load do formulário form1 inclua o código que irá configurar o formulário :
'Configura o formulário.

With Me

   .MaximizeBox = False

   .MinimizeBox = False

   .BackColor = Yellow

   .ForeColor = Black

   .Size = New System.Drawing.Size(255, 265)

   .Text = "Controles em tempo de execução"

   .FormBorderStyle = FormBorderStyle.FixedDialog

   .StartPosition = FormStartPosition.CenterScreen

End With

  1. Agora o código para a caixa de texto: txtBox
     

    With Me.txtBox

       .Text = "Teste"

       .Location = New System.Drawing.Point(10, 25)

       .Size() = New System.Drawing.Size(70, 20)

    End With

  2. A seguir o código para o controle Button - o botão de comando: btnAdd

    With Me.btnAdd

      .BackColor = Cyan

      .Text = "Incluir Valor"

      .Location = New System.Drawing.Point(90, 25)

      .Size() = New System.Drawing.Size(100, 25)

    End With

  3. Agora o código para a caixa de verificação - checkbox - chkbox

    With Me.chkBox

      .Text = "Desabilitar"

      .Location = New System.Drawing.Point(15, 190)

      .Size() = New System.Drawing.Size(110, 30)

    End With

  4. Abaixo o código para o controle ListBox - lstbox

With Me.lstBox

   .Items.Add("Ana Maria")

   .Items.Add("Paulo Coelho")

   .Items.Add("Fernado Lima")

   .Items.Add("Janice Raquel")

   .Sorted = True

   .Location = New System.Drawing.Point(10, 55)

   .Size() = New System.Drawing.Size(130, 95)

End With

  1. O último código é para o controle Label : lblcount

With Me.lblCount

   .Text = lstBox.Items.Count & " items"

   .Location = New System.Drawing.Point(55, 160)

   .Size() = New System.Drawing.Size(65, 15)

End With

  1. Finalmente o código que irá incluir estes controles no formulário :

With Me.Controls

  .Add(btnAdd)

  .Add(txtBox)

  .Add(lstBox)

  .Add(chkBox)

  .Add(lblCount)

End With

  1. Agora salve o seu projeto e pressione F5 ou Build para ver o resultado. Teremos algo parecido com a janela a seguir:

Ao lado temos o formulário em tempo de execução exibindo os controles que inserimos via código no projeto.

 

O código para a aplicação é dado a seguir:

  Imports System.Drawing.Color

Public Class Form1

       Inherits System.Windows.Forms.Form

    'Controles que vamos inserir no formulário

        Private txtBox As New TextBox()

     Private btnAdd As New Button()

       Private lstBox As New ListBox()

       Private chkBox As New CheckBox()

       Private lblCount As New Label()

 

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

          'Configura o formulário.

         With Me

            .MaximizeBox = False

            .MinimizeBox = False

            .BackColor = Yellow

            .ForeColor = Black

            .Size = New System.Drawing.Size(255, 265)

            .Text = "Controles em tempo de execução"

            .FormBorderStyle = FormBorderStyle.FixedDialog

            .StartPosition = FormStartPosition.CenterScreen

             End With

 

        With Me.txtBox     ' a caixa de texto

             .Text = "Teste"

             .Location = New System.Drawing.Point(10, 25)

             .Size() = New System.Drawing.Size(70, 20)

            End With

 

        'Formata os controles. Nota: Controles herdam a cor do formulário

            With Me.btnAdd      'o botão de comando

             .BackColor = Cyan

             .Text = "Incluir Valor"

             .Location = New System.Drawing.Point(90, 25)

             .Size() = New System.Drawing.Size(100, 25)

           End With

 

       With Me.chkBox       ' caixa de verificação

             .Text = "Desabilitar"

             .Location = New System.Drawing.Point(15, 190)

             .Size() = New System.Drawing.Size(110, 30)

           End With

 

       With Me.lstBox        'a caixa de listagem com a propriedade Sort ativa

            .Items.Add("Ana Maria")

            .Items.Add("Paulo Coelho")

            .Items.Add("Fernado Lima")

            .Items.Add("Janice Raquel")

            .Sorted = True

            .Location = New System.Drawing.Point(10, 55)

            .Size() = New System.Drawing.Size(130, 95)

           End With

 

          With Me.lblCount       ' label

            .Text = lstBox.Items.Count & " items"

            .Location = New System.Drawing.Point(55, 160)

            .Size() = New System.Drawing.Size(65, 15)

          End With

 

          'Inclui controles no formulario.

      With Me.Controls

          .Add(btnAdd)

          .Add(txtBox)

          .Add(lstBox)

          .Add(chkBox)

          .Add(lblCount)

        End With

   End Sub

End Class

 

Creio que não preciso comentar nada tal a simplicidade do código... Bye...


José Carlos Macoratti