Como adicionar dinamicamente um controle sem codificar o controle digite no Visual Basic

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 311321
Para obter uma versão Microsoft Visual translation from VPE for Csharp neste artigo, consulte 815780.
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 190670.
Sumário
Este artigo passo a passo descreve como adicionar um controle a um formulário dinamicamente no Microsoft Visual Basic 2005 ou no Microsoft Visual Basic .NET e como responder a eventos do controle.

Exemplo passo a passo

Esta seção descreve como criar um projeto que demonstra como adicionar um controle a um formulário dinamicamente Visual Basic 2005 ou no Visual Basic.NET e como responder a eventos do controle.
  1. Crie um novo projeto Visual Basic 2005 ou Visual Basic.NET Windows Application. Form1 é adicionado para o projeto por padrão.

    Observação Você deve alterar o código no Visual Basic 2005. Por padrão, Visual Basic cria dois arquivos para o projeto quando você cria um projeto Windows Forms. Se o formulário é denominado Form1, os dois arquivos que representam o formulário são chamados de Form1.vb e Form1.Designer.vb. Escreva o código no arquivo Form1.vb. O Windows Forms Designer escreve o código no arquivo Form1.Designer.vb. O Windows Forms Designer usa a palavra-chave partial para dividir a implementação de Form1 em dois arquivos separados. Esse comportamento impede que o código gerado pelo designer sendo intercaladas com seu código.

    Para obter mais informações sobre os novos aprimoramentos linguagem Visual Basic 2005, visite o seguinte site da Web Microsoft Developer Network (MSDN): Para obter mais informações sobre classes parciais e o Windows Forms Designer, visite o seguinte site da MSDN:
  2. Adicione o seguinte código à parte superior da janela código do Form1:
    Imports System.Reflection
  3. Coloque dois Botões de comando e um ComboBox no Form1 próximo à parte inferior do formulário. Você irá adicionar controles dinamicamente na parte superior do formulário. Alterar as propriedades Name e Text desses controles da seguinte maneira:
    ControleNomePropriedade de texto
    Button1btnAddControlAdicionar controle
    Button2btnRemoveControlRemover controle
    Combobox1cboControlTypesSelecionar controle de tipo
  4. Cole o seguinte código "Declaração geral" seção do Form1 após a instrução "Inherits":
        Dim DynTreeview As TreeView, DynTextBox As TextBox    Dim DynListBox As ListBox    Dim ControlObject As Control
  5. Cole o seguinte código após a região "Windows Form Designer gerou código":
    Private Sub Form1_Load(ByVal sender As System.Object, _     ByVal e As System.EventArgs) Handles MyBase.Load       cboControlTypes.Items.AddRange(New Object() _        {"TreeView", "ListBox", "TextBox"})End SubSub AddControl(ByVal ControlName As String, ByVal ControlType As String)        Dim asm As [Assembly]        asm = GetType(Form).Assembly        ControlObject = asm.CreateInstance(ControlType)        ControlObject.Name = ControlName        ControlObject.Location = New System.Drawing.Point(20, 20)        Me.Controls.Add(ControlObject)        If ControlType.EndsWith("TreeView") Then            DynTreeview = ControlObject            DynTreeview.Width = 200            DynTreeview.Height = 120            DynTreeview.Nodes.Add(New TreeNode("Root"))            DynTreeview.Nodes(0).Nodes.Add("FirstChild")            DynTreeview.Nodes(0).Nodes.Add("SecondChild")            DynTreeview.ExpandAll()            AddHandler DynTreeview.AfterSelect, _            AddressOf DynTree_AfterSelect        ElseIf ControlType.EndsWith("ListBox") Then            DynListBox = ControlObject            DynListBox.Width = 200            DynListBox.Height = 120            DynListBox.Items.AddRange(New Object() _            {"Apples", "Banana", "Oranges"})            AddHandler DynListBox.SelectedIndexChanged, _            AddressOf DynCtrl_Event        ElseIf ControlType.EndsWith("TextBox") Then            DynTextBox = ControlObject            DynTextBox.Width = 200            DynTextBox.Text = "Dynamically Added Textbox."            AddHandler DynTextBox.DoubleClick, AddressOf DynCtrl_Event        End IfEnd SubPrivate Sub btnAddControl_Click(ByVal sender As System.Object, _    ByVal e As System.EventArgs) Handles btnAddControl.Click        Dim CtrlType As String        If Not ControlObject Is Nothing Then            btnRemoveControl.PerformClick()        End If        If cboControlTypes.SelectedIndex < 0 Then            MessageBox.Show("Please select a Control Type to add.")            Exit Sub        End If        CtrlType = "System.Windows.Forms." & _        cboControlTypes.SelectedItem.ToString        Me.AddControl("myControl", CtrlType)End SubPrivate Sub DynCtrl_Event(ByVal sender As System.Object, _    ByVal e As System.EventArgs)        If sender.GetType.ToString.EndsWith("ListBox") Then            MessageBox.Show("The item you selected is: " & _            DynListBox.SelectedItem.ToString)        ElseIf sender.GetType.ToString.EndsWith("TextBox") Then            Clipboard.SetDataObject(DynTextBox.Text)            MessageBox.Show("The Text is copied to the clipboard.")        End IfEnd SubPrivate Sub btnRemoveControl_Click(ByVal sender As System.Object, _      ByVal e As System.EventArgs) Handles btnRemoveControl.Click      Me.Controls.Remove(ControlObject)      ControlObject = NothingEnd SubPrivate Sub DynTree_AfterSelect(ByVal sender As Object, _      ByVal e As TreeViewEventArgs)      MessageBox.Show("The Node you clicked on is: " & e.Node.Text)End Sub
  6. Salve seu projeto. No menu Debug , clique em Iniciar e execute seu projeto.
  7. Na caixa de combinação, clique em TreeView como o tipo de controle e, em seguida, clique no botão Adicionar controle . Observe que um novo controle TreeView é adicionado. Clique em qualquer nó para testar o evento AfterClick do controle TreeView.

Discussão de código

  • Neste exemplo, o controle ComboBox contém a lista de tipos de controle a ser adicionado dinamicamente. Você preencher essa lista no procedimento Load do formulário.
  • Você declarou três objetos de controle específico na seção "Declaração geral" para que você possa usar a funcionalidade individual desses objetos de controle em seu programa. Outro benefício de declarar tipos de controle específico é que você pode acessar IntelliSense enquanto você está programando.
  • No procedimento btnAddControl_Click, você verificar para determinar se há outro controle que já está carregado. Em caso afirmativo, você remove o controle existente e adicione o novo controle que foi selecionado na caixa de combinação. Você também certificar-se que a caixa de combinação possui uma seleção válida. Se a seleção não for válida, o programa gera uma caixa de mensagem e sai do procedimento sem processamento mais instruções. Se a seleção é válida, você chama o procedimento AddControl com parâmetros apropriados.
  • No procedimento AddControl, você declarou asm como um tipo System.Reflection.assembly . A instrução GetType(Form) retorna o objeto de tipo do tipo formulário . Você, em seguida, use o método assembly deste objeto para recuperar uma instância do assembly no qual a classe de formulário é definida. Depois de assembly, o objeto asm é criado. Você pode usar o método CreateInstance com um parâmetro de seqüência de caracteres ControlType para criar uma instância do controle. Depois que o controle é criado, você adicioná-lo para o formulário atual usando o método Me.Controls.Add . Em seguida, usando o método EndsWith da classe String , verifique o tipo de controle que é passado para esse procedimento como o segundo argumento. Dependendo do tipo de controle, você definir as propriedades individuais de controle no se... ElseIf... End If bloco. Você usa uma instrução AddHandler para conectar o evento específico de controle dinamicamente adicionado com o procedimento de tratamento. Para controles ListBox e TextBox, você conectado SelectedIndexChanged e DoubleClick eventos com o procedimento DynCtrl_Event. Para o TreeView controle, você usou um procedimento separado chamado DynTree_AfterSelect para conectar o controle com o evento AfterSelect do controle TreeView.
  • O procedimento de tratamento de evento para um controle TreeView requer uma assinatura exclusiva de dois outros controles. O segundo tipo de argumento no procedimento DynTree_AfterSelect é do tipo TreeViewEventArgs ; para obter o procedimento DynCtrl_Event você usar tipo System.EventArgs . O tipo de TreeViewEventArgs fornece informações adicionais como as propriedades do nó selecionado.
Você poderia ter usado a palavra-chave WithEvents na declaração do controle em vez de usar a instrução AddHandler para programação manualmente os manipuladores de eventos. Nesse caso, você poderia ter usado manipuladores de eventos separado para cada controle (como são usados para os controles de tempo de design no formulário).
Referências
  • Para obter mais informações sobre como adicionar um controle em um formulário se o tipo de controle for codificado, consulte o tópico "Adicionando controles a Windows Forms" na documentação do Visual Studio 2005 ou Visual Studio .NET Help.
  • Para obter mais informações sobre como adicionar manipuladores de eventos, consulte o tópico "Criando manipuladores de eventos" na documentação do Visual Studio 2005 ou Visual Studio .NET Help.

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 311321 - Última Revisão: 05/11/2007 07:08:50 - Revisão: 3.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic .NET 2002 Standard Edition

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB311321 KbMtpt
Comentários