Partilhar via


Demonstra Passo a passo: Criação de um controle composto com translation from VPE for Csharp Visual

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 C# 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, clique com o botão direito do mouse em UserControl1.cs e em seguida, clique em Renomear.Alterar nome de arquivo para ctlClock.cs.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.cse, em seguida, clique em Exibir Designer.

  2. No 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, ele não for exibido com os controles a superfície de design, mas em vez disso, no Designer de componente (uma 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 Timer tiques de componente. 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.

    [C#]

    protected void timer1_Tick(object sender, System.EventArgs e)
    {
        // Causes the label to display the current time.
        lblDisplay.Text = DateTime.Now.ToLongTimeString(); 
    }
    

    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íveis com o virtual palavra-chave. Para obter mais informações, consulte a seção "Inheriting de um usuário controle" abaixo.

    protected virtual void timer1_Tick(object sender, System.EventArgs e)
    
  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.cse, em seguida, clique em Exibir código.

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

  2. localizar o public partial class ctlClock demonstrativo. Sob a chave de abertura ({), digite o código a seguir.

    [C#]

    private Color colFColor;
    private Color colBColor;
    

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

  3. Digite o seguinte código abaixo as declarações de variáveis da etapa 2.

    [C#]

    // Declares the name and type of the property.
    public Color ClockBackColor
    {
        // Retrieves the value of the private variable colBColor.
        get
        {
            return colBColor;
        }
        // Stores the selected value in the private variable colBColor, and 
        // updates the background color of the label control lblDisplay.
        set
        {
            colBColor = value;
            lblDisplay.BackColor = colBColor;   
        }
    }
    // Provides a similar set of instructions for the foreground color.
    public Color ClockForeColor
    {
        get
        {
            return colFColor;
        }
        set
        {
            colFColor = value;
            lblDisplay.ForeColor = colFColor;
        }
    }
    

    O código anterior faz duas propriedades personalizadas, ClockForeColor e ClockBackColor, disponível para os usuários subseqüentes desse controle. 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 aplicativos autônomos; deve ser hospedados em um contêiner.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, localizar o ClockBackColor propriedade e, em seguida, selecionar a propriedade 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.

    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.cse, 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.cs 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 o public class demonstrativo. Observe que o controle herda de ctlClockLib.ctlClock. Sob a chave de abertura ({) demonstrativo, digite o código a seguir.

    [C#]

    private DateTime dteAlarmTime;
    private bool blnAlarmSet;
    // These properties will be declared as public to allow future 
    // developers to access them.
    public DateTime AlarmTime
    {
        get
        {
            return dteAlarmTime;
        }
        set
        {
            dteAlarmTime = value;
        }
    }
    public bool AlarmSet
    {
        get
        {
            return blnAlarmSet;
        }
        set
        {
            blnAlarmSet = value;
        }
    }
    

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, em seguida, clique em Exibir Designer.

    O designer de ctlAlarmClock é aberto na janela principal.

  2. clicar parte a 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, um alarme de 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 Editor de código, localizar o private bool blnAlarmSet; demonstrativo. Imediatamente abaixo dela, adicione a demonstrativo a seguir.

    [C#]

    private bool blnColorTicker;
    
  2. No Editor de código, localizar a chave de fechamento (}) no participante da classe. Antes da chave, adicione o código a seguir.

    [C#]

    protected override void timer1_Tick(object sender, System.EventArgs e)
    {
        // Calls the Timer1_Tick method of ctlClock.
        base.timer1_Tick(sender, e);
        // Checks to see if the alarm is set.
        if (AlarmSet == false)
            return;
        else
            // If the date, hour, and minute of the alarm time are the same as
            // the current time, flash an alarm. 
        {
            if (AlarmTime.Date == DateTime.Now.Date && AlarmTime.Hour == 
                DateTime.Now.Hour && AlarmTime.Minute == DateTime.Now.Minute)
            {
                // 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) 
                {
                    lblAlarm.BackColor = Color.Red;
                    blnColorTicker = true;
                }
                else
                {
                    lblAlarm.BackColor = Color.Blue;
                    blnColorTicker = false;
                }
            }
            else
            {
                // Once the alarm has sounded for a minute, the label is made 
                // invisible again.
                lblAlarm.Visible = false;
            }
        }
    }
    

    A adição desse código realiza várias tarefas.The override 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 base.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.

    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.cse, em seguida, clique em Exibir Designer.

    O designer abre.

  2. Adicione um botão no controle.conjunto sistema autônomo propriedades do botão da seguinte maneira.

    Propriedade

    Valor

    Nome

    btnAlarmOff

    Texto

    desabilitar alarme

  3. No designer, clicar duas vezes em btnAlarmOff.

    The Editor de código é aberto para o private void btnAlarmOff_Click linha.

  4. Modificar esse método para que se parece com o código a seguir.

    [C#]

    private void btnAlarmOff_Click(object sender, System.EventArgs e)
    {
        // Turns off the alarm.
        AlarmSet = false;
        // Hides the flashing label.
        lblAlarm.Visible = false;
    }
    
  5. 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. Adicionar um novo aplicativos do Windows projeto à solução e denomine- Teste.

  3. No gerenciador de soluções, clicar com o botão direito do mouse sobre o Referências nó para o projeto de teste.clicar Adicionar referência para exibir o Adicionar referência caixa de diálogo.clicar na guia rotulada Projetos.O ctlClockLib projeto será listado no Nome do projeto.clicar duas vezes o projeto para adicionar a referência para o projeto de teste.

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

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

  6. clicar duas vezes em ctlAlarmClock para adicionar uma cópia de ctlAlarmClock ao seu formulário.

  7. 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.

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

  9. 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

  10. No designer, clicar duas vezes em dtpTest.

    The Editor de código opens to private void dtpTest_ValueChanged.

  11. Modificar o código para que se assemelha ao seguinte.

    [C#]

    private void dtpTest_ValueChanged(object sender, System.EventArgs e)
    {
        ctlAlarmClock1.AlarmTime = dtpTest.Value;
        ctlAlarmClock1.AlarmSet = true;
        lblTest.Text = "Alarm Time is " +
            ctlAlarmClock1.AlarmTime.ToShortTimeString();
    }
    
  12. 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.

  13. 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.

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

  15. 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, a lblAlarm piscará.

  16. Desligar o alarme clicando em btnAlarmOff. 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: Exibir um controle no caixa de diálogo caixa de ferramentas de personalização

Demonstra Passo a passo: Herdar de um Windows Forms controle with Visual translation from VPE for Csharp

Como: Renomear identificadores

Conceitos

Variedades de controles Personalizars

Outros recursos

Programando com Componentes

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