Demonstra Passo a passo: Criação de um controle composto com Visual Basic
Controles compostos fornecem um meio pelo qual interfaces gráficas personalizadas podem ser criados e reutilizados. Um controle composto é essencialmente um componente com uma representação visual. Como tal, ele pode consistir de um ou mais Windows Forms controles, componentes ou blocos de código que estendem a funcionalidade Validando entrada de usuário, modificando propriedades de vídeo, ou executar outras tarefas necessárias pelo autor. Controles compostos podem ser colocados em formulários do Windows, da mesma maneira como os outros controles. Na primeira parte desta explicação passo a passo, você criar um controle composto simple, chamado ctlClock. Na segunda parte da explicação, você pode estender a funcionalidade do ctlClock por meio de herança.
Observação |
---|
As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritos na Ajuda, dependendo das configurações ativas ou configurações de edição. Para alterar as configurações, escolha Import and Export Settings sobre o Ferramentas menu. Para obter mais informações, consulte Trabalhando com configurações. |
Criando o projeto
Quando você cria um novo projeto, você pode especificar seu nome para definir o namespace raiz, o nome do assembly e o nome do projeto e garantir que o componente padrão será no namespace correto.
Para criar a biblioteca de controle de ctlClockLib e o controle de ctlClock
No menu Arquivo, clique em Novo e, em seguida, clique em Projeto. para abrir a caixa de diálogo Novo Projeto.
Na lista de Visual Basic projetos, selecionados o Windows Control Library modelo de projeto, o tipo de ctlClockLib na nome caixa e clique OK.
O nome do projeto, ctlClockLib, também é atribuído ao namespace raiz por padrão. O namespace principal é usado para qualificar os nomes dos componentes no conjunto de módulos (assembly). Por exemplo, se dois assemblys fornecem componentes chamados ctlClock, você pode especificar o ctlClock usando o componente ctlClockLib.ctlClock.
No Solution Explorer, clique com o botão direito UserControl1.vbe em seguida, clique em Renomear. Altere o nome de arquivo para ctlClock.vb. Clique no botão Sim quando for perguntado se você desejar renomear todas as referências para o elemento de código "UserControl1".
Observação Por padrão, um controle composto herda de UserControl classe fornecida pelo sistema. O UserControl classe fornece a funcionalidade necessária para todos os controles de composição e implementa o padrão métodos e propriedades.
Sobre o arquivo menu, clique em Salvar tudo para salvar o projeto.
Adicionando o Windows controles e componentes para o controle composto
Uma interface visual é uma parte essencial do seu controle composto. Essa interface visual é implementado pela adição de um ou mais controles do Windows para a superfície de designer. Na demonstração a seguir, você irá incorporar a seu controle composto de controles do Windows e escrever código para implementar a funcionalidade.
Para adicionar um rótulo e um Timer para seu controle composto
No Solution Explorer, clique com o botão direito ctlClock.vbe em seguida, clique em View Designer.
Na caixa de ferramentas, expanda o Controles comuns nó e clique duas vezes em rótulo.
A Label controle chamado Label1 é adicionado ao seu controle na superfície de designer.
No designer, clique em Label1. Na janela Properties, defina as propriedades a seguintes.
Propriedade
Alterar para
Nome
lblDisplay
Texto
(espaço em branco)
AlinhamentoDoTexto
MiddleCenter
Font.Size
14
No caixa de ferramentas, expanda o componentes nó e clique duas vezes em Timer.
Porque um Timer é um componente, ele não tem representação visual em tempo de execução. Portanto, não aparecem com os controles na superfície de design, mas sim no Component Designer (Bandeja inferior da superfície de design).
No Designer de componente, clique em Timer1e defina a Interval propriedade para 1000 e o Enabled propriedade para True.
O Interval propriedade controla a freqüência com que os tiques de componente timer. Cada vez que Timer1 tiques, ele executará o código de Timer1_Tick evento. O intervalo representa o número de milissegundos entre as escalas.
No Designer de componente, clique duas vezes em Timer1 para ir para o Timer1_Tick evento para ctlClock.
Modificar o código para que se assemelha ao seguinte exemplo de código. Certifique-se de alterar o modificador de acesso de Private para Protected.
[Visual Basic]
Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles Timer1.Tick ' Causes the label to display the current time. lblDisplay.Text = Format(Now, "hh:mm:ss") End Sub
Esse código fará com que a hora atual a ser mostrado na lblDisplay. Porque o intervalo de Timer1 foi definido como 1000, esse evento ocorrerá em cada mil milissegundos, portanto a atualização a cada segundo de hora atual.
Modificar o método a ser substituível. Para obter mais informações, consulte o "herdar de um controle de usuário" seção abaixo.
[Visual Basic]
Protected Overridable Sub Timer1_Tick(ByVal sender As Object, ByVal _ e As System.EventArgs) Handles Timer1.Tick
Sobre o arquivo menu, clique em Salvar tudo para salvar o projeto.
Adicionar propriedades para o controle composto
O controle do relógio agora encapsula um Label controle e um Timer componente, cada um com seu próprio conjunto de propriedades inerente. Enquanto as propriedades individuais desses controles não será acessíveis a usuários subseqüentes do seu controle, você pode criar e expor propriedades personalizadas, escrevendo os apropriado blocos de código. O procedimento a seguir, você irá adicionar propriedades para o controle que permitem ao usuário alterar a cor de plano de fundo e texto.
Para adicionar uma propriedade para o controle composto
No Solution Explorer, clique com o botão direito ctlClock.vbe em seguida, clique em Exibir código.
O Editor de código para o controle abre.
Localize o Public Class ctlClock instrução. Abaixo dela, digite o seguinte código.
[Visual Basic]
Private colFColor as Color Private colBColor as Color
Essas instruções criam as variáveis particulares que você usará para armazenar os valores para as propriedades que você está prestes a criar.
Insira o seguinte código abaixo de declarações de variáveis a partir da etapa 2.
[Visual Basic]
' Declares the name and type of the property. Property ClockBackColor() as Color ' Retrieves the value of the private variable colBColor. Get Return colBColor End Get ' Stores the selected value in the private variable colBColor, and ' updates the background color of the label control lblDisplay. Set(ByVal value as Color) colBColor = value lblDisplay.BackColor = colBColor End Set End Property ' Provides a similar set of instructions for the foreground color. Property ClockForeColor() as Color Get Return colFColor End Get Set(ByVal value as Color) colFColor = value lblDisplay.ForeColor = colFColor End Set End Property
O código anterior faz duas propriedades personalizadas, ClockForeColor e ClockBackColor, disponível para usuários subseqüentes desse controle chamando o Property instrução. O Get e Set instruções fornecem para armazenamento e recuperação de valor da propriedade, bem como o código para implementar a funcionalidade apropriada para a propriedade.
Sobre o arquivo menu, clique em Salvar tudo para salvar o projeto.
Testando o controle
Controles não são projetos autônomos; eles devem ser hospedados em um recipiente próprio (container). Testar o comportamento em tempo de execução do controle e exercício de suas propriedades com o Contêiner de teste de UserControl. Para obter mais informações, consulte Como: Teste o comportamento de tempo de execução de um UserControl.
Para testar seu controle.
Pressione F5 para compilar o projeto e executar o controle da Contêiner de teste de UserControl.
Na grade de propriedade do contêiner de teste, selecione o ClockBackColor propriedade e em seguida, clique na seta suspensa para exibir a paleta de cores.
Escolha uma cor clicando nele.
A cor de plano de fundo do seu controle altera a cor selecionada.
Use uma seqüência semelhante de eventos para verificar se a ClockForeColor propriedade está funcionando como esperado.
Clique em Fechar para fechar a Contêiner de teste de UserControl.
Esta seção e seções anteriores, você viu como os componentes e controles do Windows podem ser combinados com código e empacotamento para fornecer funcionalidade personalizada na forma de um controle composto. Você aprendeu a expor propriedades no seu controle composto e como testar o seu controle após a conclusão. Na próxima seção, você aprenderá como construir um controle composto herdado usando o ctlClock como base.
Herdar de um controle composto
Nas seções anteriores, você aprendeu como combinar o código, componentes e controles do Windows em composição de controles reutilizável. Seu controle composto agora pode ser usado como base no qual outros controles podem ser criados. O processo de derivar uma classe de uma classe base é chamado herança. Nesta seção, você irá criar um controle composto chamado ctlAlarmClock. Esse controle será derivado controle pai, ctlClock. Você aprenderá a estender a funcionalidade de ctlClock , substituindo os métodos de pai e a adição de novos métodos e propriedades.
A primeira etapa na criação de um controle herdado é derivar a seu pai. Essa ação cria um novo controle que tem todas as propriedades, métodos e as características gráficas do controle pai, mas também pode atuar como uma base para a adição de funcionalidade de nova ou modificada.
Para criar o controle herdado
No Solution Explorer, clique com o botão direito ctlClockLib, aponte para Adde em seguida, clique em O controle de usuário.
A caixa de diálogo Adicionar Novo Item aparece.
Selecione o Herdadas de controle de usuário modelo.
No nome , digite ctlAlarmClock.vbe em seguida, clique em Add.
O O selecionador de herança caixa de diálogo aparece.
Em Nome do componente, clique duas vezes em ctlClock.
No Solution Explorer, procure os projetos atuais.
Observação Um arquivo chamado ctlAlarmClock.vb foi adicionado ao projeto atual.
Adicionar as propriedades de alarme
Propriedades são adicionadas a um controle herdado da mesma forma que eles são adicionados a um controle composto. Agora, você usará a sintaxe de declaração de propriedade para adicionar duas propriedades para o controle: AlarmTime, que irá armazenar o valor de data e hora em que o alarme é desativado, e AlarmSet, que indica se o alarme é definido.
Para adicionar propriedades a seu controle composto
No Solution Explorer, clique com o botão direito ctlAlarmClocke em seguida, clique em Exibir código.
Localize a declaração de classe para o controle de ctlAlarmClock, que aparece como Public Class ctlAlarmClock. Na declaração da classe, insira o código a seguir.
[Visual Basic]
Private dteAlarmTime As Date Private blnAlarmSet As Boolean ' These properties will be declared as Public to allow future ' developers to access them. Public Property AlarmTime() As Date Get Return dteAlarmTime End Get Set(ByVal value as Date) dteAlarmTime = value End Set End Property Public Property AlarmSet() As Boolean Get Return blnAlarmSet End Get Set(ByVal value as Boolean) blnAlarmSet = value End Set End Property
Adicionando a Interface gráfica do controle
Seu controle herdado tem uma interface visual que é idêntica ao controle que herda do. Ela possui os mesmos controles constituintes como o controle pai, mas as propriedades dos controles constituintes não estará disponíveis a menos que especificamente estavam expostos. Você pode adicionar a interface gráfica de um controle composto herdado da mesma maneira como você adicionaria a qualquer controle composto. Para continuar a adicionar a interface visual do despertador, você adicionará um controle label que piscará quando é soar o alarme.
Para adicionar o controle de rótulo
No Solution Explorer, clique com o botão direito ctlAlarmClocke clique em View Designer.
O designer para ctlAlarmClock abre na janela principal.
Clique em lblDisplay (a parte de exibição do controle) e exibir a janela de propriedades.
Observação Enquanto todas as propriedades são exibidas, eles estão esmaecidos. Isso indica que essas propriedades são nativas do lblDisplay e não pode ser modificado ou acessado na janela Propriedades. Por padrão, os controles contidos em um controle composto são Private, e suas propriedades não são acessíveis por meios.
Observação Se desejar que os usuários subseqüentes do seu controle composto tenham acesso aos seus controles internos, declará-los como Public ou Protected. Isso permitirá que você definir e modificar propriedades de controles contidos no seu controle composto, usando o código apropriado.
Adicionar um Label o controle para o seu controle composto.
Usando o mouse, arraste o Label o controle imediatamente abaixo da caixa de exibição. Na janela Properties, defina as propriedades a seguintes.
Propriedade
Configuração
Nome
lblAlarm
Texto
Alarme!
AlinhamentoDoTexto
MiddleCenter
Visible
False
Adicionando a funcionalidade de alarme
Nos procedimentos anteriores, você adicionou um controle que irá ativar a funcionalidade de alarme no seu controle composto e propriedades. Neste procedimento, você irá adicionar código para comparar a hora atual para a hora do alarme e, se eles forem iguais, para som e um alarme de flash. Substituindo o Timer1_Tick o método de ctlClock e adicionando código adicional para ele, você estenderá a capacidade de ctlAlarmClock , mantendo toda a funcionalidade inerente de ctlClock.
Para substituir o método Timer1_Tick de ctlClock
No Solution Explorer, clique com o botão direito ctlAlarmClock.vbe em seguida, clique em Exibir código.
Localize o Private blnAlarmSet As Boolean instrução. Imediatamente abaixo dela, adicione a instrução a seguir.
[Visual Basic]
Dim blnColorTicker as Boolean
Localize o End Class a instrução na parte inferior da página. Antes de End Class a instrução, adicione o código a seguir.
[Visual Basic]
Protected Overrides Sub Timer1_Tick(ByVal sender As Object, ByVal e _ As System.EventArgs) ' Calls the Timer1_Tick method of ctlClock. MyBase.Timer1_Tick(sender, e) ' Checks to see if the Alarm is set. If AlarmSet = False Then Exit Sub End If ' If the date, hour, and minute of the alarm time are the same as ' now, flash and beep an alarm. If AlarmTime.Date = Now.Date And AlarmTime.Hour = Now.Hour And _ AlarmTime.Minute = Now.Minute Then ' Sounds an audible beep. Beep() ' Sets lblAlarmVisible to True, and changes the background color based on the ' value of blnColorTicker. The background color of the label will ' flash once per tick of the clock. lblAlarm.Visible = True If blnColorTicker = False Then lblAlarm.BackColor = Color.PeachPuff blnColorTicker = True Else lblAlarm.BackColor = Color.Plum blnColorTicker = False End If Else ' Once the alarm has sounded for a minute, the label is made ' invisible again. lblAlarm.Visible = False End If End Sub
A adição desse código realiza várias tarefas. O Overrides instrução direciona o controle para usar esse método no lugar do método que foi herdado do controle base. Quando esse método é chamado, chama o método substitui invocando o MyBase.Timer1_Tick a instrução, garantindo que toda a funcionalidade incorporada no controle original é reproduzida nesse controle. Em seguida, executa o código adicional para incorporar a funcionalidade de alarme. Um controle de rótulo piscando aparecerá quando o alarme soar, e um bipe audível será ouvido.
Observação Porque você está substituindo um manipulador de eventos herdadas, você não tem de especificar o evento com o Handles palavra-chave. O evento já está conectado. Tudo o que você está substituindo é a implementação do manipulador.
O controle do alarm clock está quase concluído. A única coisa que permanece é implementar uma maneira para desativá-la. Para fazer isso, você irá adicionar código para o lblAlarm_Click método.
Para implementar o método de suspensão dos sinais
No Solution Explorer, clique com o botão direito ctlAlarmClock.vbe em seguida, clique em View Designer.
No designer, clique duas vezes em lblAlarm. O O Editor de código abre para o Private Sub lblAlarm_Click linha.
Modificar esse método para que se parece com o código a seguir.
[Visual Basic]
Private Sub lblAlarm_Click(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles lblAlarm.Click ' Turns off the alarm. AlarmSet = False ' Hides the flashing label. lblAlarm.Visible = False End Sub
Sobre o arquivo menu, clique em Salvar tudo para salvar o projeto.
Usando o controle herdado em um formulário.
Você pode testar seu controle herdado da mesma maneira que você testou o controle da classe base, ctlClock: Pressione F5 para compilar o projeto e executar o controle da Contêiner de teste de UserControl. Para obter mais informações, consulte Como: Teste o comportamento de tempo de execução de um UserControl.
Para colocar o controle para usar, você precisará hospedá-lo em um formulário. Assim como um controle composto padrão, um controle composto herdado não é autônomo e deve ser hospedado em um formulário ou outro recipiente. Desde que ctlAlarmClock tem uma profundidade maior funcionalidade, código adicional é necessária para testar o proprietário. Neste procedimento, você irá escrever um programa simples para testar a funcionalidade de ctlAlarmClock. Você irá escrever código para definir e exibir o AlarmTime propriedade de ctlAlarmClocke testar suas funções inerentes.
Para criar e adicionar seu controle a um formulário de teste
No Solution Explorer, clique com o botão direito ctlClockLibe em seguida, clique em Build.
Sobre o arquivo , aponte para Adde, em seguida, clique em Novo projeto.
Adicionar um novo Windows Application de projeto à solução e o nome de teste.
O teste projeto é adicionado ao Solution Explorer.
No Solution Explorer, clique com o botão direito do Test projeto nó e então clique em Add Reference para exibir o Add Reference caixa de diálogo.
Clique na guia projetos. O projeto ctlClockLib serão listadas em Nome do projeto. Clique duas vezes em ctlClockLib para adicionar a referência ao projeto de teste.
No Solution Explorer, clique com o botão direito testee em seguida, clique em Build.
No caixa de ferramentas, expanda o ctlClockLib componentes nó.
Clique duas vezes em ctlAlarmClock para adicionar uma instância de ctlAlarmClock para o seu formulário.
No Toolbox, localize e clique duas vezes em DateTimePicker para adicionar uma DateTimePicker controle ao formulário e adicione um Label controle clicando duas vezes em rótulo.
Use o mouse para posicionar os controles em um local conveniente no formulário.
Defina as propriedades desses controles da seguinte maneira.
Controle
Propriedade
Valor
label1
Texto
(espaço em branco)
Nome
lblTest
dateTimePicker1
Nome
dtpTest
Formato
No designer, clique duas vezes em dtpTest.
O O Editor de código abre para Private Sub dtpTest_ValueChanged.
Modificar o código para que ele é semelhante ao seguinte.
[Visual Basic]
Private Sub dtpTest_ValueChanged(ByVal sender As Object, ByVal e As _ System.EventArgs) Handles dtpTest.ValueChanged ctlAlarmClock1.AlarmTime = dtpTest.Value ctlAlarmClock1.AlarmSet = True lblTest.Text = "Alarm Time is " & Format(ctlAlarmClock1.AlarmTime, _ "hh:mm") End Sub
No Solution Explorer, clique com o botão direito testee em seguida, clique em Set as StartUp Project.
No menu Depuração, clique em Iniciar Depuração.
O programa de teste é iniciado. Observe que a hora atual é atualizada a ctlAlarmClock controle e que a hora inicial é mostrada na DateTimePicker de controle.
Clique na DateTimePicker onde os minutos da hora são exibidos.
Usando o teclado, defina um valor de minutos é um minuto de maior que a hora atual mostrada por ctlAlarmClock.
O tempo para a configuração de alarme é mostrado na lblTest. Aguarde até que o tempo exibido atingir o tempo de configuração de alarme. Quando o tempo exibido atinge o tempo para o qual o alarme é definido, o sinal sonoro soará e lblAlarm será flash.
Desligar o alarme clicando em lblAlarm. Agora, você pode redefinir o alarme.
Esta explicação passo a passo abordou vários conceitos-chave. Você aprendeu a criar um controle composto pela combinação de controles e componentes em um recipiente de controle composto. Você aprendeu a adicionar propriedades a seu controle e escrever código para implementar a funcionalidade personalizada. A última seção, você aprendeu a estender a funcionalidade de um determinado controle composto por meio de herança e alterar a funcionalidade dos métodos de host, substituindo esses métodos.
Consulte também
Tarefas
Como: Controles de composição do autor
Como: Exibir um controle na escolher a caixa de diálogo itens da caixa de ferramentas
Conceitos
Variedades de controles personalizados