Partager via


Exemple de formulaire de revendications automatiques

L’exemple De réclamations automatiques traite d’un scénario hypothétique pour un évaluateur d’assurance. Le travail de l’évaluateur l’oblige à se rendre auprès des clients à leur domicile ou à leur entreprise et à entrer les renseignements sur leur réclamation dans un formulaire. Pour augmenter la productivité de l’évaluateur, son service informatique développe une application tablette qui lui permet d’entrer rapidement et précisément des informations de revendication par le biais de deux contrôles d’encre : InkEdit et InkPicture .

Dans cet exemple, un contrôle InkEdit est utilisé pour chaque champ de saisie de texte. Un utilisateur entre les informations pertinentes sur une police d’assurance et un véhicule dans ces champs avec un stylet. Le contrôle InkPicture est utilisé pour ajouter de l’encre sur une image automobile afin de mettre en évidence les zones endommagées de l’automobile. L’exemple Revendications automatiques est disponible pour C# et Microsoft Visual Basic .NET. Cette rubrique décrit Visual Basic .NET.

La classe AutoClaims est définie comme une sous-classe de System.Windows.Forms.Form , et une classe imbriquée est définie pour créer et gérer des couches d’encre pour différents types de dommages. Quatre gestionnaires d’événements sont définis pour effectuer les tâches suivantes :

  • Initialisation des calques de formulaire et d’encre.
  • Redessination du contrôle InkPicture .
  • Sélection d’une couche d’encre dans la zone de liste.
  • Modification de la visibilité d’une couche d’encre.

Notes

Les versions de cet exemple sont disponibles en C# et Visual Basic .NET. La version décrite dans cette section est Visual Basic .NET. Les concepts sont les mêmes entre les versions.

 

Définition des calques de formulaire et d’encre

Vous devez importer l’espace de noms Microsoft.Ink :

Imports Microsoft.Ink
// The Ink namespace, which contains the Tablet PC Platform API
using Microsoft.Ink;

Ensuite, dans la classe AutoClaims, une classe imbriquée InkLayer est définie et un tableau de quatre InkLayer objets est déclaré. (InkLayer contient un objet Microsoft.Ink.Ink pour stocker l’encre, et des valeurs System.Drawing.Color et Boolean pour stocker la couleur et l’état masqué du calque.) Un cinquième objet Ink est déclaré pour gérer l’encre pour InkPicture lorsque tous les calques d’encre sont masqués.

' Declare the array of ink layers used the vehicle illustration.
Dim inkLayers(3) As InkLayer

' Declare an empty ink object (used when we don't want to draw
' any ink).
Dim emptyInk As Ink

' Declare a value to hold the index of selected ink
Dim selectedIndex As Integer

' Declare a value to hold whether the selected ink is hidden
Dim selectedHidden As Boolean 
// Declare the array of ink layers used the vehicle illustration.
InkLayer[] inkLayers;

// Declare an empty ink object (used when we don't want to draw
// any ink).
Ink emptyInk;

// Declare a value to hold the index of selected ink
int selectedIndex = -1;

// Declare a value to hold whether the selected ink is hidden
bool selectedHidden = false;

Chaque couche a son propre objet Ink . Il existe quatre domaines d’intérêt distincts dans le formulaire de revendication (corps, fenêtres, pneus et phares), de sorte que quatre objets InkLayer sont utilisés. Un utilisateur peut afficher n’importe quelle combinaison de couches à la fois.

Initialisation des calques formulaire et manuscrit

Le Load gestionnaire d’événements initialise l’objet Ink et les quatre InkLayer objets.

' Initialize the empty ink
emptyInk = New Ink()

' Initialize the four different layers of ink on the vehicle diagram:  
' vehicle body, windows, tires, and headlights.
inkLayers(0) = New InkLayer(New Ink(), Color.Red, False)
inkLayers(1) = New InkLayer(New Ink(), Color.Violet, False)
inkLayers(2) = New InkLayer(New Ink(), Color.LightGreen, False)
inkLayers(3) = New InkLayer(New Ink(), Color.Aqua, False)
// Initialize the empty ink
emptyInk = new Ink();

// Initialize the four different layers of ink on the vehicle diagram:  
// vehicle body, windows, tires, and headlights.
inkLayers = new InkLayer[4];
inkLayers[0] = new InkLayer(new Ink(), Color.Red, false);
inkLayers[1] = new InkLayer(new Ink(), Color.Violet, false);
inkLayers[2] = new InkLayer(new Ink(), Color.LightGreen, false);
inkLayers[3] = new InkLayer(new Ink(), Color.Aqua, false);

Ensuite, sélectionnez la première entrée (Corps) dans la zone de liste.

' By default, select the first ink layer
lstAnnotationLayer.SelectedIndex = 0
// By default, select the first ink layer
lstAnnotationLayer.SelectedIndex = 0;

Enfin, définissez la couleur d’encre du contrôle InkPicture sur l’entrée de zone de liste actuellement sélectionnée.

inkPictVehicle.DefaultDrawingAttributes.Color =
      inkLayers(lstAnnotationLayer.SelectedIndex).ActiveColor
inkPictVehicle.DefaultDrawingAttributes.Color = inkLayers[lstAnnotationLayer.SelectedIndex].ActiveColor;

Redessination du contrôle InkPicture

Dans le gestionnaire d’événements Paint hérité du contrôle InkPicture, les couches d’encre sont vérifiées pour déterminer lesquelles sont masquées. Si un calque n’est pas masqué, la procédure événementielle l’affiche à l’aide de la méthode Draw de la propriété Renderer. Si vous regardez dans l’Explorateur d’objets, vous verrez que la propriété Microsoft.Ink.InkPicture.Renderer est définie comme un objet Microsoft.Ink.Renderer :

Private Sub inkPictVehicle_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles inkPictVehicle.Paint
    Dim layer As InkLayer

    ' Cycle through each ink layer.  If it is visible, paint it.
    ' Note that it is necessary to customize the paint
    ' behavior, since we want to hide/show different ink layers.
    For Each layer In inkLayers
        If (Not layer.Hidden) Then
            inkPictVehicle.Renderer.Draw(e.Graphics, layer.ActiveInk.Strokes)
        End If
    Next
End Sub
private void inkPictVehicle_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
    // Cycle through each ink layer.  If it is visible, paint it.
    // Note that it is necessary to customize the paint
    // behavior, since we want to hide/show different ink layers.
    foreach (InkLayer layer in inkLayers)
    {
        if (!layer.Hidden)
        {
             inkPictVehicle.Renderer.Draw(e.Graphics,layer.ActiveInk.Strokes);
        }
    }          
}

Sélection d’une couche d’encre dans la zone de liste

Lorsque l’utilisateur sélectionne un élément dans la zone de liste, le gestionnaire d’événements SelectedIndexChanged vérifie d’abord que la sélection a changé et que le contrôle InkPicture ne collecte pas actuellement d’encre. Il définit ensuite la couleur d’encre du contrôle InkPicture sur la couleur appropriée pour le calque d’encre sélectionné. En outre, il met à jour la zone Masquer la couche case activée pour refléter les status masqués de la couche d’encre sélectionnée. Enfin, la méthode Refresh héritée du contrôle InkPicture est utilisée pour afficher uniquement les couches souhaitées dans le contrôle.

Private Sub chHideLayer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chHideLayer.CheckedChanged

    ' Provided that the new checked hidden value is different than
    ' the previous value...
    If (Not (chHideLayer.Checked = selectedHidden)) Then
        If (Not (inkPictVehicle.CollectingInk)) Then

            ' Update the array indicating the visibility of each ink layer
            inkLayers(lstAnnotationLayer.SelectedIndex).Hidden = chHideLayer.Checked

            ' Set the active ink object to the selected ink
            ' Note that if the current layer is not visible, empty
            ' ink is used to prevent flicker.
            inkPictVehicle.InkEnabled = False
            If (chHideLayer.Checked) Then
                inkPictVehicle.Ink = emptyInk
            Else
                inkPictVehicle.Ink = inkLayers(lstAnnotationLayer.SelectedIndex).ActiveInk
            End If

            ' Update the previous checkbox value to the current
            selectedHidden = chHideLayer.Checked

            ' If the layer is marked hidden, disable ink collection
            inkPictVehicle.InkEnabled = Not chHideLayer.Checked

            Me.Refresh()
       Else
            ' If ink collection is enabled, the active ink cannot be changed
            ' and it is necessary to restore the checkbox to its previous value.
            chHideLayer.Checked = selectedHidden
            MessageBox.Show("Cannot change visiblity while collecting ink.")
       End If
   End If
End Sub
private void lstAnnotationLayer_SelectedIndexChanged(object sender, System.EventArgs e)
{
    // Provided that the new selected index value is different than
    // the previous value...
    if (lstAnnotationLayer.SelectedIndex != selectedIndex) 
    {
        if (!inkPictVehicle.CollectingInk)
        {
            // Set the ink and visiblity of the current ink layer
            inkPictVehicle.DefaultDrawingAttributes.Color = inkLayers[lstAnnotationLayer.SelectedIndex].ActiveColor;
            chHideLayer.Checked = inkLayers[lstAnnotationLayer.SelectedIndex].Hidden;

            // Set the active ink object to the selected ink
            // Note that if the current layer is not visible, empty
            // ink is used to prevent flicker.
            inkPictVehicle.InkEnabled = false;
            inkPictVehicle.Ink = chHideLayer.Checked?emptyInk:inkLayers[lstAnnotationLayer.SelectedIndex].ActiveInk;
            inkPictVehicle.InkEnabled = !chHideLayer.Checked;
    
            selectedIndex = lstAnnotationLayer.SelectedIndex;

            this.Refresh();
        }
        else 
        {
            // If ink collection is enabled, the active ink cannot be changed
            // and it is necessary to restore the selection to its previous value.
            lstAnnotationLayer.SelectedIndex = selectedIndex;
            MessageBox.Show("Cannot change active ink while collecting ink.");
        }
    }
}

Modification de la visibilité d’une couche d’encre

Le CheckedChanged gestionnaire d’événements vérifie d’abord que la sélection a changé et que le contrôle InkPicture ne collecte pas actuellement d’encre. Il met ensuite à jour la status masquée de la couche d’encre sélectionnée, et définit InkEnabled du contrôle InkPicture sur FALSE, .

Ensuite, la propriété InkEnabled du contrôle InkPicture a la valeur FALSE avant de mettre à jour sa propriété Ink.

Enfin, le contrôle InkPicture est activé ou désactivé pour le composant de véhicule particulier selon que la zone Masquer la couche case activée est sélectionnée et que la méthode Refresh du contrôle InkPicture est utilisée pour afficher uniquement les couches souhaitées dans le contrôle.

Private Sub chHideLayer_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chHideLayer.CheckedChanged

    ' Provided that the new checked hidden value is different than
    ' the previous value...
    If (Not (chHideLayer.Checked = selectedHidden)) Then
        If (Not (inkPictVehicle.CollectingInk)) Then

            ' Update the array indicating the visibility of each ink layer
            inkLayers(lstAnnotationLayer.SelectedIndex).Hidden = chHideLayer.Checked

            ' Set the active ink object to the selected ink
            ' Note that if the current layer is not visible, empty
            ' ink is used to prevent flicker.
            inkPictVehicle.InkEnabled = False
            If (chHideLayer.Checked) Then
                inkPictVehicle.Ink = emptyInk
            Else
                inkPictVehicle.Ink = inkLayers(lstAnnotationLayer.SelectedIndex).ActiveInk
            End If

            ' Update the previous checkbox value to the current
            selectedHidden = chHideLayer.Checked

            ' If the layer is marked hidden, disable ink collection
            inkPictVehicle.InkEnabled = Not chHideLayer.Checked

            Me.Refresh()
        Else
            ' If ink collection is enabled, the active ink cannot be changed
            ' and it is necessary to restore the checkbox to its previous value.
            chHideLayer.Checked = selectedHidden
            MessageBox.Show("Cannot change visiblity while collecting ink.")
        End If
    End If
End Sub
private void chHideLayer_CheckedChanged(object sender, System.EventArgs e)
{
    // Provided that the new checked hidden value is different than
    // the previous value...
    if (chHideLayer.Checked != selectedHidden) 
    {
        if (!inkPictVehicle.CollectingInk)
        {
            // Update the array indicating the visibility of each ink layer
            inkLayers[lstAnnotationLayer.SelectedIndex].Hidden = chHideLayer.Checked;

            // Set the active ink object to the selected ink
            // Note that if the current layer is not visible, empty
            // ink is used to prevent flicker.
            inkPictVehicle.InkEnabled = false;
            inkPictVehicle.Ink = chHideLayer.Checked?emptyInk:inkLayers[lstAnnotationLayer.SelectedIndex].ActiveInk;
 
            // If the layer is marked hidden, disable ink collections
            inkPictVehicle.InkEnabled = !chHideLayer.Checked;

            // Update the previous checkbox value to reflect the current
            selectedHidden = chHideLayer.Checked;

            this.Refresh();
        }
        else 
        {
            // If ink collection is enabled, the active ink cannot be changed
            // and it is necessary to restore the checkbox to its previous value.
            chHideLayer.Checked = selectedHidden;
            MessageBox.Show("Cannot change visiblity while collecting ink.");
        }
    }
}

Fermeture du formulaire

Dans le Windows Form Designer code généré, les contrôles InkEdit et InkPicture sont ajoutés à la liste des composants du formulaire lors de l’initialisation du formulaire. Lorsque le formulaire se ferme, les contrôles InkEdit et InkPicture sont supprimés, ainsi que les autres composants du formulaire, par la méthode Dispose du formulaire. La méthode Dispose du formulaire supprime également les objets Ink créés pour le formulaire.

Microsoft.Ink.Ink

Contrôle InkPicture

Contrôle InkEdit