Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Para obter uma versão Microsoft Visual translation from VPE for Csharp neste artigo, consulte 815780
(http://support.microsoft.com/kb/815780/
)
.
Para uma versão deste artigo do Microsoft Visual Basic 6.0, consulte 190670
(http://support.microsoft.com/kb/190670/
)
.
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.
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.
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):
Adicione o seguinte código à parte superior da janela código do Form1:
Imports System.Reflection
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:
Recolher esta tabelaExpandir esta tabela
Controle
Nome
Propriedade de texto
Button1
btnAddControl
Adicionar controle
Button2
btnRemoveControl
Remover controle
Combobox1
cboControlTypes
Selecionar controle de tipo
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
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 Sub
Sub 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 If
End Sub
Private 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 Sub
Private 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 If
End Sub
Private Sub btnRemoveControl_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnRemoveControl.Click
Me.Controls.Remove(ControlObject)
ControlObject = Nothing
End Sub
Private Sub DynTree_AfterSelect(ByVal sender As Object, _
ByVal e As TreeViewEventArgs)
MessageBox.Show("The Node you clicked on is: " & e.Node.Text)
End Sub
Salve seu projeto. No menu Debug , clique em Iniciar e execute seu projeto.
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.
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).
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.
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
(http://support.microsoft.com/kb/311321/en-us/
)
Quanto esforço foi necessário para seguir os procedimentos deste artigo?
Muito baixo
Baixo
Moderado
Alto
Muito alto
Diga-nos o porque e o que podemos fazer para melhorar esta informação
Obrigado! Seus comentários são usados para nos ajudar a aperfeiçoar o conteúdo de suporte. Para obter mais opções de ajuda, visite a Home Page de Ajuda e Suporte.