Share via


Demonstra Passo a passo: Criação de um controle composto com o Visual Basic

Composição de controles fornecem um meio pelo qual interfaces gráficas personalizados podem ser criados e reutilizados.Um controle composto é essencialmente um componente com uma representação visual.sistema autônomo tal, ele pode consistir de um ou mais Windows Forms controles, componentes ou blocos de código pode estender a funcionalidade, validação de entrada do usuário, modificando sistema autônomo propriedades de vídeo ou executar outras tarefas necessárias pelo autor.Composição de controles podem ser colocados on Windows Forms da mesma maneira sistema autônomo outros controles.Na primeira parte desta explicação passo a passo, você criar um simples controle composto chamado ctlClock. Na segunda parte da explicação passo a passo, você estender a funcionalidade de ctlClock por meio de herança.

Observação:

As caixas de diálogo e comandos de menu demonstradas podem ser diferentes daqueles descritas na Ajuda, dependendo das configurações ativas ou configurações de edição.Para alterar as configurações, escolher Importar e exportar configurações on the Ferramentas menu.Para obter mais informações, consulte Configurações do Visual Studio.

Criando o projeto

Quando você cria um novo projeto, especifique seu nome para conjunto o namespace raiz, 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 ctlClockLib e o controle ctlClock

  1. No menu Arquivo, clique em Novo e, em seguida, clique em Projeto. para abrir a caixa de diálogo Novo Projeto.

  2. Na lista de Visual Basic projetos, selecionar o Biblioteca de controle do Windows modelo de projeto, do tipo ctlClockLib in the Nome caixa e, em seguida, clicar OK.

    O nome do projeto, ctlClockLib, é também atribuída para a raiz por padrão. O namespace principal é usado para qualificar os nomes dos componentes no conjunto de módulos (assembly).Por exemplo, se dois assemblies oferecem componentes chamados ctlClock, você pode especificar seu ctlClock usando o componente ctlClockLib.ctlClock.

  3. No gerenciador de soluções, clicar com o botão direito do mouse UserControl1.vbe, em seguida, clique em Renomear.Alterar 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 o UserControl classe fornecida pelo sistema. The UserControl classe fornece a funcionalidade necessária para todos os composição de controles e implementa propriedades e métodos padrão.

  4. Sobre o Arquivo menu, clicar Salvar todos para salvar o projeto.

Adicionar Windows controles e componentes para o controle composto

Uma interface visual é uma parte essencial de seu controle composto.Essa interface visual é implementada pela adição de um ou mais controles do Windows para a superfície de designer.Na demonstração a seguir, você irá incorporar controles do Windows no seu controle composto e escrever código para implementar a funcionalidade.

Para adicionar um rótulo e um timer para seu controle composto

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlClock.vbe, em seguida, clique em Exibir Designer.

  2. Na caixa de ferramentas, expandir o Controles comuns nó e, em seguida, clicar duas vezes em Rótulo.

    A Label controle de chamada Label1 é adicionado ao seu controle na superfície de design.

  3. No designer, clicar Label1.Na janela Propriedades, conjunto as propriedades a seguir.

    Propriedade

    Alterar para

    Nome

    lblDisplay

    Texto

    (espaço em branco)

    AlinhamentoDoTexto

    MiddleCenter

    fonte.dimensionar

    14

  4. No Caixa de ferramentas, expandir o Componentes nó e, em seguida, clicar duas vezes em Timer.

    Porque um Timer é um componente, ele não tem representação visual em time de execução. Portanto, não é exibido com os controles a superfície de design, mas em vez disso, no Designer de componente (bandeja na parte inferior da superfície de design).

  5. No Designer de componente, clicar Timer1e, em seguida, conjunto o Interval propriedade para 1000 and the Enabled propriedade para True.

    The Interval propriedade controla a freqüência com que o componente timer tiques. Cada vez Timer1 tiques, ele executará o código a Timer1_Tick evento. O intervalo representa o número de milissegundos entre pulsos.

  6. No Designer de componente, clicar duas vezes em Timer1 para ir para o Timer1_Tick evento para ctlClock.

  7. Modificar o código para que se parece com exemplo de código a seguir.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 time corrente a ser mostrado em lblDisplay. Porque o intervalo de Timer1 foi definido como 1000, esse evento ocorrerá cada milhares milissegundos, assim, atualizando a cada segundo de time corrente.

  8. Modificar o método a ser substituível.Para obter mais informações, consulte a seção "Inheriting de um usuário controle" abaixo.

    [Visual Basic]

    Protected Overridable Sub Timer1_Tick(ByVal sender As Object, ByVal _
        e As System.EventArgs) Handles Timer1.Tick
    
  9. Sobre o Arquivo menu, clicar Salvar todos para salvar o projeto.

Adicionando propriedades ao controle composto

Controle do relógio agora encapsula um Label controle e um Timer componente, cada qual com seu próprio conjunto de propriedades inerentes. Embora as propriedades desses controles individuais não seja acessíveis aos usuários subseqüentes do seu controle, você pode criar e expor propriedades personalizadas, gravando os blocos de código apropriados.O procedimento a seguir, você irá adicionar propriedades ao controle do que o usuário possa alterar a cor de plano de fundo e texto.

Para adicionar uma propriedade para o controle composto

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlClock.vbe, em seguida, clique em Exibir código.

    O Editor de código para o controle é aberto.

  2. localizar o Public Class ctlClock demonstrativo. Abaixo dela, digite o código a seguir.

    [Visual Basic]

    Private colFColor as Color
    Private colBColor as Color
    

    Essas instruções crie as variáveis particulares que você usará para armazenar os valores das propriedades que você está prestes a criar.

  3. Insira o seguinte código abaixo as declarações de variáveis 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 os usuários subseqüentes deste controle chamando o Property demonstrativo. The Get e Set fornecem instruções para armazenamento e recuperação de valor da propriedade, bem sistema autônomo código para implementar a funcionalidade apropriada para a propriedade.

  4. Sobre o Arquivo menu, clicar Salvar todos 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).Teste o comportamento do time de execução do controle e exercer suas propriedades com o Contêiner de teste de UserControl.Para obter mais informações, consulte Como: Teste o comportamento do time de execução de um UserControl.

Para teste seu controle

  1. Pressione F5 para compilar o projeto e executar o controle no Contêiner de teste de UserControl.

  2. Na grade de propriedade do contêiner de teste, selecionar o ClockBackColor propriedade e, em seguida, clicar na seta suspensa para exibir a paleta de cores.

  3. escolher uma cor clicando nele.

    Altera a cor do plano de fundo do seu controle para a cor selecionada.

  4. Use uma sequência semelhante de eventos para verificar se o ClockForeColor propriedade está funcionando conforme o esperado.

  5. clicar Fechar para fechar o Contêiner de teste de UserControl.

    Esta seção e seções anteriores, você viu como os componentes e controles do Windows podem ser combinadas com código e empacotamento para fornecer funcionalidade personalizada na forma de um controle composto.Você aprendeu expor propriedades no seu controle composto e como testar o controle após a sua conclusão.A próxima seção, você aprenderá sistema autônomo criar um controle composto herdado usando ctlClock sistema autônomo base.

Herdar de um controle composto

Nas seções anteriores, você aprendeu como agrupar controles do Windows, componentes e código em composição de controles reutilizável.O controle composto agora pode ser usado sistema autônomo base no qual outros controles podem ser criados.O processo de derivar uma classe de uma classe base é chamado de herança.Nesta seção, você criará um controle composto chamado ctlAlarmClock. Esse controle será derivado da controle pai, ctlClock. Você aprenderá a estender a funcionalidade de ctlClock métodos de pai e adicionando novos métodos e propriedades.

A primeira etapa na criação de um controle herdado é derivam seu pai.Esta ação cria um novo controle que tem todas sistema autônomo propriedades, métodos e características gráficas do controle pai, mas também pode atuar sistema autônomo base para a adição de funcionalidade nova ou modificada.

Para criar o controle herdado

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlClockLib, point to Adicionare, em seguida, clique em Controle de usuário.

    A caixa de diálogo Adicionar Novo Item aparece.

  2. selecionar o Controle de usuário herdado modelo.

  3. No Nome box, type ctlAlarmClock.vbe, em seguida, clicar Adicionar.

    The Selecionador de herança caixa de diálogo é exibida.

  4. Em Nome do componente, clicar duas vezes em ctlClock.

  5. No gerenciador de soluções, procure projetos corrente.

    Observação:

    Um arquivo chamado ctlAlarmClock.vb foi adicionada ao projeto corrente.

Adicionando propriedades alarme

Propriedades são adicionadas a um controle herdado da mesma forma que eles são adicionados ao controle composto.Agora você irá usar a sintaxe de declaração de propriedade para adicionar duas propriedades para o controle: AlarmTime, que irá armazenar o valor de data e time que o alarme é desativado, e AlarmSet, que indica se o alarme está definido.

Para adicionar propriedades a seu controle composto

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlAlarmClocke, em seguida, clique em Exibir código.

  2. localizar a declaração de classe para o controle ctlAlarmClock, que aparecerá sistema autônomo 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
    

Adicionar a interface gráfica do controle

O controle herdado tem uma interface visual idêntico ao controle de que ele herda.Ele possui sistema autônomo mesmos controles constituintes sistema autônomo controle pai, mas sistema autônomo propriedades dos controles constituintes não estará disponível a menos que eles fossem expostos especificamente.Você pode adicionar a interface gráfica de um controle composto herdada da mesma maneira sistema autônomo faria ao adicionar a qualquer controle composto.Para continuar adicionando a interface visual do relógio do alarme, você irá adicionar um controle de rótulo que piscará quando o alarme é sounding.

Para adicionar o controle de rótulo

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlAlarmClocke clique em Exibir Designer.

    O designer de ctlAlarmClock é aberto na janela principal.

  2. clicar lblDisplay (a parte de exibição do controle) e exibir a janela Propriedades.

    Observação:

    Enquanto todas as propriedades são exibidas, eles ficam esmaecidos.Isso indica que essas propriedades são nativas do lblDisplay e não podem ser modificados ou acessados na janela Propriedades. Por padrão, os controles contidos em um controle composto são Private, e suas propriedades não podem ser acessadas por qualquer meio.

    Observação:

    Se você quiser que sistema autônomo usuários subseqüentes do seu controle composto tenham acesso aos seus controles internos, declare-los sistema autônomo Public ou Protected. Isso permitirá que você conjunto e modificar propriedades de controles contidos no seu controle composto, usando o código apropriado.

  3. Adicionar um Label controlar o seu controle composto.

  4. Usando o mouse, arrastar o Label controlar imediatamente abaixo da caixa de exibição. Na janela Propriedades, conjunto as propriedades a seguir.

    Propriedade

    Configuração

    Nome

    lblAlarm

    Texto

    Alarme!

    AlinhamentoDoTexto

    MiddleCenter

    Visible

    False

Adicionando a funcionalidade de alarme

Nos procedimentos anteriores, você adicionou propriedades e um controle que irá ativar a funcionalidade de alarme no seu controle composto.Neste procedimento, você adicionará código para comparar a time corrente para a time do alarme e, se eles forem iguais, para som e um alarme do flash.Substituindo o Timer1_Tick método de ctlClock e adicionar código adicional a ele, será estender a capacidade de ctlAlarmClock mantendo toda a funcionalidade inerente de ctlClock.

Para substituir o método Timer1_Tick de ctlClock

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlAlarmClock.vbe, em seguida, clique em Exibir código.

  2. localizar o Private blnAlarmSet As Boolean demonstrativo. Imediatamente abaixo dela, adicione a demonstrativo a seguir.

    [Visual Basic]

    Dim blnColorTicker as Boolean
    
  3. localizar o End Class demonstrativo na parte inferior da página. Antes do End Class demonstrativo, 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.The Overrides demonstrativo direciona o controle para usar esse método no lugar do método que foi herdado do controle base. Quando esse método é chamado, ele chama o método substitui invocando o MyBase.Timer1_Tick demonstrativo, garantindo que toda a funcionalidade incorporada no controle original é reproduzida neste controle. Em seguida, ele executa código adicional para incorporar a funcionalidade de alarme.Um controle rótulo Brilhante aparecerá quando o alarme soar, e um bipe audível será ouvido.

    Observação:

    Porque você está substituindo um manipulador de eventos herdado, não é necessário especificar o evento com o Handles palavra-chave. O evento já está conectado.Tudo o que você está substituindo é a implementação do manipulador.

    Seu controle despertador está quase concluída.A única coisa que permanece é implementar uma maneira de desativá-la.Para fazer isso, você adicionará código à lblAlarm_Click método.

Para implementar o método shutoff

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlAlarmClock.vbe, em seguida, clique em Exibir Designer.

  2. No designer, clicar duas vezes em lblAlarm.The Editor de código é aberto para o Private Sub lblAlarm_Click linha.

  3. 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
    
  4. Sobre o Arquivo menu, clicar Salvar todos para salvar o projeto.

Usando o controle herdado em um formulário

Você pode teste seu herdadas controlam a mesma você teste ed o controle de classe base, ctlClock: Pressione F5 para compilar o projeto e executar o controle no Contêiner de teste de UserControl.Para obter mais informações, consulte Como: Teste o comportamento do time de execução de um UserControl.

Para colocar o controle usar, você precisará hospedá-lo em um formulário.sistema autônomo em um controle composto, um controle composto herdado não é autônomo e deve ser hospedado em um formulário ou Outros contêiner.Desde ctlAlarmClock tiver uma maior intensidade de funcionalidade, código adicional é necessário para teste-lo. Esse procedimento, você irá gravar um programa simples para testar a funcionalidade de ctlAlarmClock. Você irá gravar código para conjunto e exibir o AlarmTime propriedade de ctlAlarmClocke o testará suas funções inerentes.

Criar e adicionar o controle a um formulário de teste

  1. No gerenciador de soluções, clicar com o botão direito do mouse ctlClockLibe, em seguida, clique em Compilação.

  2. No menu File, aponte para Add, e clique New Project.

  3. Adicionar um novo aplicativos do Windows projeto à solução e denomine- Teste.

    The Testeprojeto é adicionado ao gerenciador de soluções.

  4. No gerenciador de soluções, clicar com o botão direito do mouse sobre o Test nó do projeto e, em seguida, clique em Adicionar referência para exibir o Adicionar referência caixa de diálogo.

  5. clicar na guia rotulada Projetos.O projeto ctlClockLib serão listadas no Nome do projeto.clicar duas vezes em ctlClockLib para adicionar a referência para o projeto de teste.

  6. No gerenciador de soluções, clicar com o botão direito do mouse Testee, em seguida, clique em Compilação.

  7. No Caixa de ferramentas, expandir o ctlClockLib componentes nó.

  8. clicar duas vezes em ctlAlarmClock para adicionar uma instância de ctlAlarmClock ao seu formulário.

  9. No Caixa de ferramentas, localizar e clicar duas vezes em DateTimePicker to add a DateTimePicker o controle para seu formulário e, em seguida, adicione um Label controlar clicando duas vezes em Rótulo.

  10. Use o mouse para posicionar os controles em um local conveniente no formulário.

  11. conjunto as propriedades de nesses controles através da seguinte maneira.

    Controle

    Propriedade

    Valor

    label1

    Texto

    (espaço em branco)

     

    Nome

    lblTest

    dateTimePicker1

    Nome

    dtpTest

     

    Formato

    Time

  12. No designer, clicar duas vezes em dtpTest.

    The Editor de código opens to Private Sub dtpTest_ValueChanged.

  13. Modificar o código para que se assemelha 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
    
  14. No gerenciador de soluções, clicar com o botão direito do mouse Testee, em seguida, clique em conjunto sistema autônomo projeto de inicialização.

  15. No menu Depuração, clique em Iniciar Depuração.

    O programa de teste é iniciado.Observe que a time corrente é atualizada no ctlAlarmClock controle e que a time inicial é mostrada na DateTimePicker controle.

  16. clicar no DateTimePicker onde os minutos da hora são exibidos.

  17. Usando o teclado, conjunto um valor de minutos que um minuto maior do que a time corrente mostrada por ctlAlarmClock.

    O time para a configuração de alarme é mostrado no lblTest. Aguarde o time exibido para atingir o time de configuração de alarme.Quando o time exibido atinge o time para o qual o alarme é definido, o sinal sonoro soará e lblAlarm piscará.

  18. Desligar o alarme clicando em lblAlarm. Agora você pode reiniciar o alarme.

    Esta explicação passo a passo abordou vários conceitos-chave.Você aprendeu criar um controle composto pela combinação de controles e componentes em um contêiner de controle composto.Você aprendeu para adicionar propriedades ao controle e escrever código para implementar a funcionalidade personalizada.A última seção, você aprendeu para estender a funcionalidade de um dado 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 autor

Como: Exibir um controle no caixa de diálogo caixa de ferramentas de personalização

Conceitos

Variedades de controles Personalizars

Outros recursos

Componente criação explicações passo a passo