Procedura dettagliata: modifica di un controllo composito con Visual BasicWalkthrough: Authoring a Composite Control with Visual Basic

I controlli compositi consentono di creare e riutilizzare interfacce grafiche personalizzate.Composite controls provide a means by which custom graphical interfaces can be created and reused. Un controllo composito è sostanzialmente un componente con rappresentazione visiva.A composite control is essentially a component with a visual representation. Può essere composto da uno o più controlli per Windows Forms, componenti o blocchi di codice in grado di estenderne le funzionalità convalidando l'input dell'utente, modificando le proprietà della visualizzazione o effettuando altre attività richieste dall'autore.As such, it might consist of one or more Windows Forms controls, components, or blocks of code that can extend functionality by validating user input, modifying display properties, or performing other tasks required by the author. I controlli compositi possono essere inseriti in Windows Forms al pari degli altri controlli.Composite controls can be placed on Windows Forms in the same manner as other controls. Nella prima parte di questa procedura verrà creato un controllo composito semplice denominato ctlClock.In the first part of this walkthrough, you create a simple composite control called ctlClock. Nella seconda parte, le funzionalità di ctlClock verranno estese mediante ereditarietà.In the second part of the walkthrough, you extend the functionality of ctlClock through inheritance.

Nota

Le finestre di dialogo e i comandi di menu visualizzati potrebbero essere diversi da quelli descritti nella Guida a seconda delle impostazioni attive o dell'edizione del programma.The dialog boxes and menu commands you see might differ from those described in Help depending on your active settings or edition. Per modificare le impostazioni, scegliere Importa/Esporta impostazioni dal menu Strumenti .To change your settings, choose Import and Export Settings on the Tools menu. Per altre informazioni, vedere Personalizzazione delle impostazioni di sviluppo in Visual Studio.For more information, see Customizing Development Settings in Visual Studio.

Creazione del progettoCreating the Project

Quando si crea un nuovo progetto è necessario specificarne il nome per impostare lo spazio dei nomi radice, il nome dell'assembly e il nome del progetto e assicurarsi che il componente predefinito sia inserito nello spazio dei nomi corretto.When you create a new project, you specify its name to set the root namespace, assembly name, and project name, and ensure that the default component will be in the correct namespace.

Per creare la libreria di controlli ctlClockLib e il controllo ctlClockTo create the ctlClockLib control library and the ctlClock control

  1. Scegliere Nuovo dal menu File, quindi selezionare Progetto per aprire la finestra di dialogo Nuovo progetto.On the File menu, point to New, and then click Project to open the New Project dialog box.

  2. Dall'elenco dei progetti di Visual Basic, selezionare il libreria di controlli Windows modello di progetto, digitare ctlClockLib nel nome casella e quindi fare clic su OK.From the list of Visual Basic projects, select the Windows Control Library project template, type ctlClockLib in the Name box, and then click OK.

    Per impostazione predefinita il nome del progetto, ctlClockLib, verrà assegnato anche allo spazio dei nomi radice.The project name, ctlClockLib, is also assigned to the root namespace by default. Lo spazio dei nomi radice viene utilizzato per qualificare i nomi dei componenti dell'assembly.The root namespace is used to qualify the names of components in the assembly. Se ad esempio due assembly forniscono componenti denominati ctlClock, sarà possibile specificare il componente ctlClock usandoctlClockLib.ctlClock.For example, if two assemblies provide components named ctlClock, you can specify your ctlClock component using ctlClockLib.ctlClock.

  3. In Esplora soluzioni fare clic con il pulsante destro del mouse su UserControl1.vb, quindi fare clic su Rinomina.In Solution Explorer, right-click UserControl1.vb, and then click Rename. Modificare il nome file in ctlClock.vb.Change the file name to ctlClock.vb. Scegliere il pulsante quando richiesto per rinominare tutti i riferimenti all'elemento di codice "UserControl1".Click the Yes button when you are asked if you want to rename all references to the code element "UserControl1".

    Nota

    Per impostazione predefinita, un controllo composito eredita la UserControl classe fornita dal sistema.By default, a composite control inherits from the UserControl class provided by the system. La UserControl classe fornisce le funzionalità richieste da tutti i controlli compositi e implementa i metodi e proprietà standard.The UserControl class provides functionality required by all composite controls, and implements standard methods and properties.

  4. Scegliere Salva tutto dal menu File per salvare il progetto.On the File menu, click Save All to save the project.

Aggiunta di componenti e controlli Windows al controllo compositoAdding Windows Controls and Components to the Composite Control

L'interfaccia visiva è parte integrante del controllo compositoA visual interface is an essential part of your composite control. e viene implementata mediante l'aggiunta di uno o più controlli Windows nell'area di progettazione.This visual interface is implemented by the addition of one or more Windows controls to the designer surface. Nella procedura riportata di seguito i controlli Windows verranno incorporati nel controllo composito e verrà scritto il codice per l'implementazione delle funzionalità.In the following demonstration, you will incorporate Windows controls into your composite control and write code to implement functionality.

Per aggiungere al controllo composito un oggetto Label e un oggetto TimerTo add a Label and a Timer to your composite control

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlClock.vb, quindi scegliere Progettazione viste.In Solution Explorer, right-click ctlClock.vb, and then click View Designer.

  2. Nella Casella degli strumenti espandere il nodo Controlli comuni e fare doppio clic su Etichetta.In the Toolbox, expand the Common Controls node, and then double-click Label.

    Oggetto Label controllo denominato Label1 viene aggiunto al controllo nell'area di progettazione.A Label control named Label1 is added to your control on the designer surface.

  3. Nella finestra di progettazione fare clic su Label1.In the designer, click Label1. Nella finestra Proprietà impostare le seguenti proprietà:In the Properties window, set the following properties.

    ProprietàProperty Modificare inChange to
    NameName lblDisplay
    perText (blank space)
    TextAlignTextAlign MiddleCenter
    Font.SizeFont.Size 14
  4. Nella Casella degli strumenti espandere il nodo Componenti, quindi fare doppio clic su Timer.In the Toolbox, expand the Components node, and then double-click Timer.

    Poiché un Timer è un componente, non dispone di alcuna rappresentazione visiva in fase di esecuzione.Because a Timer is a component, it has no visual representation at run time. non verrà visualizzato insieme ai controlli nell'area di progettazione bensì in Progettazione componenti, una barra delle applicazioni disposta nella parte inferiore dell'area di progettazione.Therefore, it does not appear with the controls on the designer surface, but rather in the Component Designer (a tray at the bottom of the designer surface).

  5. In Progettazione componenti, fare clic su Timer1, quindi impostare il Interval proprietà 1000 e Enabled proprietà True.In the Component Designer, click Timer1, and then set the Interval property to 1000 and the Enabled property to True.

    Il Interval proprietà controlla la frequenza con cui il componente timer tick.The Interval property controls the frequency with which the timer component ticks. Ogni volta che Timer1 scatta, viene eseguito il codice nell'evento Timer1_Tick.Each time Timer1 ticks, it runs the code in the Timer1_Tick event. L'intervallo rappresenta i millesimi di secondo che intercorrono tra uno scatto e l'altro.The interval represents the number of milliseconds between ticks.

  6. In Progettazione componenti fare doppio clic su Timer1 per passare all'evento Timer1_Tick di ctlClock.In the Component Designer, double-click Timer1 to go to the Timer1_Tick event for ctlClock.

  7. Modificare il codice in modo che risulti simile al seguente.Modify the code so that it resembles the following code sample. Assicurarsi di cambiare il modificatore di accesso da Private a Protected.Be sure to change the access modifier from Private to Protected.

    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  
    

    Questo codice determinerà la visualizzazione dell'ora corrente in lblDisplay.This code will cause the current time to be shown in lblDisplay. Poiché l'intervallo di Timer1 è stato impostato su 1000, l'evento verrà generato ogni mille millesimi di secondo, aggiornando quindi l'ora corrente ogni secondo.Because the interval of Timer1 was set to 1000, this event will occur every thousand milliseconds, thus updating the current time every second.

  8. Modificare il metodo in modo che sia sottoponibile a override.Modify the method to be overridable. Per ulteriori informazioni, vedere la sezione "Eredità da un controllo utente" riportata di seguito.For more information, see the "Inheriting from a User Control" section below.

    Protected Overridable Sub Timer1_Tick(ByVal sender As Object, ByVal _  
        e As System.EventArgs) Handles Timer1.Tick  
    
  9. Scegliere Salva tutto dal menu File per salvare il progetto.On the File menu, click Save All to save the project.

Aggiunta di proprietà al controllo compositoAdding Properties to the Composite Control

Il controllo orologio ora incapsula un Label controllo e un Timer componente, ciascuno con un proprio set di proprietà intrinseche.Your clock control now encapsulates a Label control and a Timer component, each with its own set of inherent properties. Benché le singole proprietà di questi controlli non siano accessibili ai futuri utenti del controllo, è possibile creare ed esporre proprietà personalizzate scrivendo i blocchi di codice appropriati.While the individual properties of these controls will not be accessible to subsequent users of your control, you can create and expose custom properties by writing the appropriate blocks of code. Nella procedura riportata di seguito verrà illustrato come aggiungere al controllo proprietà che consentono all'utente di modificare il colore dello sfondo e del testo.In the following procedure, you will add properties to your control that enable the user to change the color of the background and text.

Per aggiungere una proprietà al controllo compositoTo add a property to your composite control

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlClock.vb, quindi scegliere Visualizza codice.In Solution Explorer, right-click ctlClock.vb, and then click View Code.

    Verrà visualizzato l'editor del codice per il controllo.The Code Editor for your control opens.

  2. Individuare l'istruzione Public Class ctlClock.Locate the Public Class ctlClock statement. Sotto tale riga, aggiungere il seguente codice.Beneath it, type the following code.

    Private colFColor as Color  
    Private colBColor as Color  
    

    Queste istruzioni consentono di creare le variabili private da utilizzare per la memorizzazione dei valori delle proprietà che verranno create.These statements create the private variables that you will use to store the values for the properties you are about to create.

  3. Sotto le dichiarazioni delle variabili del passaggio 2 inserire il seguente codice.Insert the following code beneath the variable declarations from step 2.

    ' 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  
    

    Nel codice riportato in precedenza vengono create due proprietà personalizzate, ClockForeColor e ClockBackColor, disponibili agli utenti successivi del controllo mediante l'utilizzo dell'istruzione Property.The preceding code makes two custom properties, ClockForeColor and ClockBackColor, available to subsequent users of this control by invoking the Property statement. Le istruzioni Get e Set consentono di archiviare e recuperare il valore della proprietà e di inserire il codice per implementare le funzionalità appropriate per la proprietà.The Get and Set statements provide for storage and retrieval of the property value, as well as code to implement functionality appropriate to the property.

  4. Scegliere Salva tutto dal menu File per salvare il progetto.On the File menu, click Save All to save the project.

Test del controlloTesting the Control

I controlli non sono progetti autonomi e devono pertanto essere inseriti in un contenitore.Controls are not stand-alone projects; they must be hosted in a container. Eseguire il test del comportamento del controllo in fase di esecuzione e sperimentare le proprietà con UserControl Test Container.Test your control's run-time behavior and exercise its properties with the UserControl Test Container. Per altre informazioni, vedere Procedura: Eseguire il test del comportamento in fase di esecuzione di UserControl.For more information, see How to: Test the Run-Time Behavior of a UserControl.

Per eseguire il test del controlloTo test your control

  1. Per compilare il progetto ed eseguire il controllo in UserControl Test Container, premere F5.Press F5 to build the project and run your control in the UserControl Test Container.

  2. Nella griglia della proprietà di Test Container, selezionare la proprietà ClockBackColor, quindi fare clic sulla freccia a discesa per visualizzare la tavolozza dei colori.In the test container's property grid, select the ClockBackColor property, and then click the drop-down arrow to display the color palette.

  3. Scegliere un colore facendovi clic sopra.Choose a color by clicking it.

    Il colore di sfondo del controllo cambierà in base al colore selezionato.The background color of your control changes to the color you selected.

  4. Usare una sequenza di eventi simile per verificare il corretto funzionamento della proprietà ClockForeColor.Use a similar sequence of events to verify that the ClockForeColor property is functioning as expected.

  5. Per chiudere la finestra UserControl Test Container, scegliere Chiudi.Click Close to close the UserControl Test Container.

    In questa sezione e in quelle precedenti è stato illustrato come combinare componenti e controlli Windows con codici e package per aggiungere funzionalità personalizzate al modulo di un controllo composito.In this section and the preceding sections, you have seen how components and Windows controls can be combined with code and packaging to provide custom functionality in the form of a composite control. Si è inoltre appreso come esporre le proprietà del controllo composito e come eseguire il test del controllo dopo averlo completato.You have learned to expose properties in your composite control, and how to test your control after it is complete. Nella sezione successiva verranno fornite informazioni sulla modalità di creazione di un controllo composito ereditato utilizzando ctlClock come base.In the next section you will learn how to construct an inherited composite control using ctlClock as a base.

Eredità da un controllo compositoInheriting from a Composite Control

Nelle sezioni precedenti si è appreso come combinare controlli, componenti e codice Windows in controlli compositi riutilizzabili.In the previous sections, you learned how to combine Windows controls, components, and code into reusable composite controls. Il controllo composito può ora essere usato come base per la compilazione di altri controlli.Your composite control can now be used as a base upon which other controls can be built. Il processo di derivazione di una classe da una classe di base è detto ereditarietà.The process of deriving a class from a base class is called inheritance. In questa sezione verrà creato un controllo composito denominato ctlAlarmClock.In this section, you will create a composite control called ctlAlarmClock. Il controllo verrà derivato dal relativo controllo padre, in questo caso ctlClock.This control will be derived from its parent control, ctlClock. Verrà spiegato come estendere le funzionalità di ctlClock mediante l'override dei metodi padre e l'aggiunta di nuovi metodi e proprietà.You will learn to extend the functionality of ctlClock by overriding parent methods and adding new methods and properties.

Per creare un controllo ereditato, è innanzitutto necessario derivare il controllo dal relativo elemento padre.The first step in creating an inherited control is to derive it from its parent. Questa operazione consente di creare un nuovo controllo, con le stesse proprietà, metodi e caratteristiche grafiche del controllo padre, che può essere anche utilizzato come base per l'aggiunta di una funzionalità nuova o modificata.This action creates a new control that has all of the properties, methods, and graphical characteristics of the parent control, but can also act as a base for the addition of new or modified functionality.

Per creare il controllo ereditatoTo create the inherited control

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlClockLib, scegliere Aggiungi, quindi Controllo utente.In Solution Explorer, right-click ctlClockLib, point to Add, and then click User Control.

    Viene aperta la finestra di dialogo Aggiungi nuovo elemento.The Add New Item dialog box opens.

  2. Selezionare il modello Controllo utente ereditato.Select the Inherited User Control template.

  3. Nella casella Nome digitare ctlAlarmClock.vb e quindi fare clic su Aggiungi.In the Name box, type ctlAlarmClock.vb, and then click Add.

    Viene visualizzata la finestra di dialogo Selezione ereditarietà.The Inheritance Picker dialog box appears.

  4. In Nome componente fare doppio clic su ctlClock.Under Component Name, double-click ctlClock.

  5. In Esplora soluzioni scorrere i progetti correnti.In Solution Explorer, browse through the current projects.

    Nota

    Nel progetto corrente è stato aggiunto il file denominato ctlAlarmClock.vb.A file called ctlAlarmClock.vb has been added to the current project.

Aggiunta delle proprietà per l'allarmeAdding the Alarm Properties

Le modalità di aggiunta delle proprietà a un controllo ereditato sono analoghe a quelle utilizzate per i controlli compositi.Properties are added to an inherited control in the same way they are added to a composite control. Mediante la sintassi di dichiarazione delle proprietà si aggiungeranno ora al controllo due proprietà: AlarmTime, in cui viene memorizzato il valore della data e dell'ora in cui l'allarme deve essere disattivato, e AlarmSet, che indica se l'allarme è impostato o meno.You will now use the property declaration syntax to add two properties to your control: AlarmTime, which will store the value of the date and time the alarm is to go off, and AlarmSet, which will indicate whether the alarm is set.

Per aggiungere proprietà al controllo compositoTo add properties to your composite control
  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlAlarmClock, quindi scegliere Visualizza codice.In Solution Explorer, right-click ctlAlarmClock, and then click View Code.

  2. Individuare la dichiarazione di classe per il controllo ctlAlarmClock, visualizzato come Public Class ctlAlarmClock.Locate the class declaration for the ctlAlarmClock control, which appears as Public Class ctlAlarmClock. Inserire il codice seguente nella dichiarazione di classe.In the class declaration, insert the following code.

    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  
    

Aggiunta del controllo all'interfaccia graficaAdding to the Graphical Interface of the Control

Il controllo ereditato presenta un'interfaccia grafica identica a quella del controllo dal quale ereditaYour inherited control has a visual interface that is identical to the control it inherits from. e possiede gli stessi controlli costitutivi del controllo padre, ma le proprietà dei controlli costitutivi non sono disponibili, a meno che non siano state specificamente esposte.It possesses the same constituent controls as its parent control, but the properties of the constituent controls will not be available unless they were specifically exposed. Analogamente a qualsiasi altro controllo composito, è possibile aggiungere elementi all'interfaccia grafica di un controllo composito ereditato, utilizzando la medesima procedura.You may add to the graphical interface of an inherited composite control in the same manner as you would add to any composite control. In questo esempio verrà utilizzato un controllo label per aggiungere un effetto intermittente all'interfaccia grafica del controllo quando l'allarme suona.To continue adding to your alarm clock's visual interface, you will add a label control that will flash when the alarm is sounding.

Per aggiungere il controllo labelTo add the label control
  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlAlarmClock e scegliere Visualizza finestra di progettazione.In Solution Explorer, right-click ctlAlarmClock, and click View Designer.

    Nella finestra principale viene aperta la finestra di progettazione per ctlAlarmClock.The designer for ctlAlarmClock opens in the main window.

  2. Fare clic su lblDisplay (parte visualizzata del controllo) e osservare la finestra Proprietà.Click lblDisplay (the display portion of the control), and view the Properties window.

    Nota

    Tutte le proprietà sono presenti ma inattive, ossia visualizzate in grigio.While all the properties are displayed, they are dimmed. Ciò indica che le proprietà sono native di lblDisplay e non è possibile accedervi né modificarle nella finestra Proprietà.This indicates that these properties are native to lblDisplay and cannot be modified or accessed in the Properties window. Per impostazione predefinita i controlli contenuti in un controllo composito sono Private e le relative proprietà non sono accessibili.By default, controls contained in a composite control are Private, and their properties are not accessible by any means.

    Nota

    Se si desidera che gli utenti successivi del controllo composito abbiano accesso ai relativi controlli interni, dichiararli come Public o Protected.If you want subsequent users of your composite control to have access to its internal controls, declare them as Public or Protected. Sarà così possibile impostare e modificare le proprietà dei controlli contenuti nel controllo composito mediante il codice appropriato.This will allow you to set and modify properties of controls contained within your composite control by using the appropriate code.

  3. Aggiungere un Label controllo al controllo composito.Add a Label control to your composite control.

  4. Usando il mouse, trascinare il Label controllo immediatamente di sotto della visualizzazione.Using the mouse, drag the Label control immediately beneath the display box. Nella finestra Proprietà impostare le seguenti proprietà:In the Properties window, set the following properties.

    ProprietàProperty ImpostazioneSetting
    NameName lblAlarm
    perText Allarme!Alarm!
    TextAlignTextAlign MiddleCenter
    VisibleVisible False

Aggiunta della funzionalità di allarmeAdding the Alarm Functionality

Nelle procedure precedenti sono state aggiunte proprietà e un controllo in grado di abilitare la funzionalità di allarme nel controllo composito.In the previous procedures, you added properties and a control that will enable alarm functionality in your composite control. In questa procedura verrà aggiunto un codice che consente di confrontare l'ora corrente con l'ora dell'allarme e, se le ore risultano identiche, attivare un allarme sonoro e lampeggiante.In this procedure, you will add code to compare the current time to the alarm time and, if they are the same, to sound and flash an alarm. Eseguendo l'override del metodo Timer1_Tick di ctlClock e aggiungendovi ulteriore codice sarà possibile estendere le capacità di ctlAlarmClock e conservare allo stesso le funzionalità intrinseche di ctlClock.By overriding the Timer1_Tick method of ctlClock and adding additional code to it, you will extend the capability of ctlAlarmClock while retaining all of the inherent functionality of ctlClock.

Per eseguire l'override del metodo Timer1_Tick di ctlClockTo override the Timer1_Tick method of ctlClock
  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlAlarmClock.vb, quindi scegliere Visualizza codice.In Solution Explorer, right-click ctlAlarmClock.vb, and then click View Code.

  2. Individuare l'istruzione Private blnAlarmSet As Boolean.Locate the Private blnAlarmSet As Boolean statement. e aggiungere subito dopo la seguente istruzione.Immediately beneath it, add the following statement.

    Dim blnColorTicker as Boolean  
    
  3. Individuare l'istruzione End Class nella parte inferiore della pagina.Locate the End Class statement at the bottom of the page. Prima dell'istruzione End Class aggiungere il seguente codice.Just before the End Class statement, add the following code.

    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  
    

    Il codice appena aggiunto ha diverse funzioni.The addition of this code accomplishes several tasks. Se si utilizza l'istruzione Overrides, il controllo utilizzerà questo metodo anziché il metodo ereditato dal controllo di base.The Overrides statement directs the control to use this method in place of the method that was inherited from the base control. Una volta chiamato, questo metodo chiamerà il metodo di cui esegue l'override utilizzando l'istruzione MyBase.Timer1_Tick e assicurando che tutte le funzionalità incorporate nel controllo originale vengano riprodotte in questo controllo.When this method is called, it calls the method it overrides by invoking the MyBase.Timer1_Tick statement, ensuring that all of the functionality incorporated in the original control is reproduced in this control. Verrà quindi eseguito il codice aggiuntivo per incorporare la funzionalità di allarme.It then runs additional code to incorporate the alarm functionality. Quando l'allarme viene attivato, viene visualizzato un controllo etichetta lampeggiante e viene emesso un segnale acustico.A flashing label control will appear when the alarm occurs, and an audible beep will be heard.

    Nota

    Poiché si esegue l'override di un gestore eventi ereditato, non è necessario specificare l'evento tramite la parola chiave Handles.Because you are overriding an inherited event handler, you do not have to specify the event with the Handles keyword. L'evento risulta già associato.The event is already hooked up. L'override riguarda l'implementazione del gestore.All you are overriding is the implementation of the handler.

    Il controllo dell'allarme è quasi completo.Your alarm clock control is almost complete. L'unica operazione rimasta è l'implementazione di un sistema di disattivazione.The only thing that remains is to implement a way to turn it off. A tal fine, è necessario aggiungere codice al metodo lblAlarm_Click.To do this, you will add code to the lblAlarm_Click method.

Per implementare il metodo di disattivazioneTo implement the shutoff method
  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlAlarmClock.vb, quindi scegliere Visualizza finestra di progettazione.In Solution Explorer, right-click ctlAlarmClock.vb, and then click View Designer.

  2. Nella finestra di progettazione fare doppio clic sul controllo lblAlarm.In the designer, double-click lblAlarm. Nell'editor di codice verrà visualizzata la riga Private Sub lblAlarm_Click.The Code Editor opens to the Private Sub lblAlarm_Click line.

  3. Modificare il metodo in modo che risulti simile al seguente codice.Modify this method so that it resembles the following code.

    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. Scegliere Salva tutto dal menu File per salvare il progetto.On the File menu, click Save All to save the project.

Utilizzo del controllo ereditato in un moduloUsing the Inherited Control on a Form

È possibile eseguire il test del controllo ereditato esattamente come si esegue quello del controllo classe di base, ctlClock: premere F5 per compilare il progetto ed eseguire il controllo in UserControl Test Container.You can test your inherited control the same way you tested the base class control, ctlClock: Press F5 to build the project and run your control in the UserControl Test Container. Per altre informazioni, vedere Procedura: Eseguire il test del comportamento in fase di esecuzione di UserControl.For more information, see How to: Test the Run-Time Behavior of a UserControl.

Per utilizzare il controllo è necessario inserirlo in un modulo.To put your control to use, you will need to host it on a form. Come i controlli compositi standard, i controlli compositi ereditati non possono essere autonomi e devono essere inclusi in un modulo o in un altro contenitore.As with a standard composite control, an inherited composite control cannot stand alone and must be hosted in a form or other container. Poiché ctlAlarmClock include un maggior numero di funzionalità, per eseguire il test è necessario aggiungere del codice.Since ctlAlarmClock has a greater depth of functionality, additional code is required to test it. In questa procedura verrà scritto un semplice programma per la verifica delle funzionalità di ctlAlarmClock.In this procedure, you will write a simple program to test the functionality of ctlAlarmClock. Verrà inoltre scritto il codice per impostare e visualizzare la proprietà AlarmTime di ctlAlarmClock e verrà eseguito il test delle funzionalità intrinseche del controllo.You will write code to set and display the AlarmTime property of ctlAlarmClock, and will test its inherent functions.

Per compilare e aggiungere il controllo a un modulo di testTo build and add your control to a test form
  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su ctlClockLib, quindi scegliere Compila.In Solution Explorer, right-click ctlClockLib, and then click Build.

  2. Scegliere Aggiungi dal menu Filee quindi fare clic su Nuovo progetto.On the File menu, point to Add, and then click New Project.

  3. Aggiungere un nuovo progetto Applicazione Windows alla soluzione e denominarlo Test.Add a new Windows Application project to the solution, and name it Test.

    Il progetto Test verrà aggiunto a Esplora soluzioni.The Test project is added to Solution Explorer.

  4. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo di progetto Test, quindi scegliere Aggiungi riferimento per visualizzare la finestra di dialogo Aggiungi riferimento.In Solution Explorer, right-click the Test project node, and then click Add Reference to display the Add Reference dialog box.

  5. Scegliere la scheda Progetti.Click the tab labeled Projects. Il progetto ctlClockLib verrà elencato in Nome progetto.The project ctlClockLib will be listed under Project Name. Fare doppio clic su ctlClockLib per aggiungere il riferimento al progetto di test.Double-click ctlClockLib to add the reference to the test project.

  6. In Esplora soluzioni fare clic con il pulsante destro del mouse su Test, quindi scegliere Compila.In Solution Explorer, right-click Test, and then click Build.

  7. Nella Casella degli strumenti espandere il nodo Componenti ctlClockLib.In the Toolbox, expand the ctlClockLib Components node.

  8. Fare doppio clic su ctlAlarmClock per aggiungere un'istanza di ctlAlarmClock al modulo.Double-click ctlAlarmClock to add an instance of ctlAlarmClock to your form.

  9. Nel della casella degli strumenti, individuare e fare doppio clic su DateTimePicker per aggiungere un DateTimePicker il controllo al form e quindi aggiungere un Label controllo facendo doppio clic su etichetta.In the Toolbox, locate and double-click DateTimePicker to add a DateTimePicker control to your form, and then add a Label control by double-clicking Label.

  10. Posizionare mediante il mouse i controlli in un punto del modulo di facile accesso.Use the mouse to position the controls in a convenient place on the form.

  11. Impostare le proprietà dei controlli come indicato di seguito.Set the properties of these controls in the following manner.

    ControlControl ProprietàProperty ValoreValue
    label1 perText (blank space)
    NameName lblTest
    dateTimePicker1 NameName dtpTest
    FormatFormat Time
  12. Nella finestra di progettazione fare doppio clic su dtpTest.In the designer, double-click dtpTest.

    Nell'Editor di codice viene visualizzato Private Sub dtpTest_ValueChanged.The Code Editor opens to Private Sub dtpTest_ValueChanged.

  13. Modificare il codice in modo che risulti simile al seguente.Modify the code so that it resembles the following.

    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. In Esplora soluzioni fare clic con il pulsante destro del mouse su Test e scegliere Imposta come progetto di avvio.In Solution Explorer, right-click Test, and then click Set as StartUp Project.

  15. Scegliere Avvia debug dal menu Debug.On the Debug menu, click Start Debugging.

    Verrà avviato il programma di test.The test program starts. Si noti che l'ora corrente viene aggiornata nel ctlAlarmClock controllo e l'ora di inizio viene visualizzato nel DateTimePicker controllo.Note that the current time is updated in the ctlAlarmClock control, and that the starting time is shown in the DateTimePicker control.

  16. Fare clic su di DateTimePicker vengono visualizzati i minuti dell'ora.Click the DateTimePicker where the minutes of the hour are displayed.

  17. Utilizzando la tastiera, impostare un valore per i minuti maggiore di un minuto rispetto all'ora corrente visualizzata da ctlAlarmClock.Using the keyboard, set a value for minutes that is one minute greater than the current time shown by ctlAlarmClock.

    L'ora per l'impostazione dell'allarme è visualizzata in lblTest.The time for the alarm setting is shown in lblTest. Attendere che l'ora visualizzata raggiunga l'ora di impostazione dell'allarme.Wait for the displayed time to reach the alarm setting time. Quando l'ora visualizzata raggiunge l'ora su cui è impostato l'allarme, verrà emesso un segnale acustico e lblAlarm lampeggerà.When the displayed time reaches the time to which the alarm is set, the beep will sound and lblAlarm will flash.

  18. Disattivare l'allarme facendo clic su lblAlarm.Turn off the alarm by clicking lblAlarm. A questo punto è possibile reimpostare l'allarme.You may now reset the alarm.

    In questa procedura dettagliata sono stati trattati diversi concetti chiave.This walkthrough has covered a number of key concepts. Si è appreso come creare un controllo composito combinando controlli e componenti in un contenitore controllo compositoYou have learned to create a composite control by combining controls and components into a composite control container. e come aggiungere proprietà al controllo e scrivere il codice per l'implementazione di funzionalità personalizzate.You have learned to add properties to your control, and to write code to implement custom functionality. Nell'ultima sezione sono state illustrate l'estensione delle funzionalità di uno specifico controllo composito mediante ereditarietà e la modifica delle funzionalità dei metodi host mediante override.In the last section, you learned to extend the functionality of a given composite control through inheritance, and to alter the functionality of host methods by overriding those methods.

Vedere ancheSee Also

Tipi di controlli personalizzatiVarieties of Custom Controls
Procedura: Modificare controlli compositiHow to: Author Composite Controls
Procedura: Visualizzare un controllo nella finestra di dialogo Scegli elementi della Casella degli strumentiHow to: Display a Control in the Choose Toolbox Items Dialog Box
Procedure dettagliate per la modifica di componentiComponent Authoring Walkthroughs