다음을 통해 공유


자동 클레임 양식 샘플

자동 클레임 샘플은 보험 평가자에 대한 가상 시나리오를 해결합니다. 평가자의 작업을 수행하려면 해당 사용자가 집이나 사업장에서 고객과 함께 방문하고 클레임 정보를 양식에 입력해야 합니다. 평가자의 생산성을 높이기 위해 IT 부서는 InkEditInkPicture 컨트롤이라는 두 가지 잉크 컨트롤을 통해 클레임 정보를 빠르고 정확하게 입력할 수 있는 태블릿 애플리케이션을 개발합니다.

이 샘플에서는 각 텍스트 입력 필드에 InkEdit 컨트롤이 사용됩니다. 사용자는 펜으로 이러한 필드에 보험 정책 및 차량에 대한 관련 정보를 입력합니다. InkPicture 컨트롤은 자동차 이미지 위에 잉크를 추가하여 자동차의 손상된 영역을 강조 표시하는 데 사용됩니다. 자동 클레임 샘플은 C# 및 Microsoft Visual Basic .NET에 사용할 수 있습니다. 이 항목에서는 Visual Basic .NET에 대해 설명합니다.

AutoClaims 클래스는 System.Windows.Forms.Form 의 하위 클래스로 정의되며, 중첩 클래스는 다양한 유형의 손상에 대한 잉크 계층을 만들고 관리하기 위해 정의됩니다. 다음 작업을 수행하도록 4개의 이벤트 처리기가 정의됩니다.

  • 양식 및 잉크 계층 초기화
  • InkPicture 컨트롤 다시 그리기
  • 목록 상자를 통해 잉크 계층을 선택합니다.
  • 잉크 계층의 표시 유형 변경

참고

이 샘플의 버전은 C# 및 Visual Basic .NET에서 사용할 수 있습니다. 이 섹션에서 설명하는 버전은 Visual Basic .NET입니다. 개념은 버전 간에 동일합니다.

 

양식 및 잉크 계층 정의

Microsoft.Ink 네임스페이스를 가져와야 합니다.

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

다음으로 AutoClaims 클래스에서 중첩 클래스 InkLayer 가 정의되고 4개의 InkLayer 개체 배열이 선언됩니다. InkLayer에는 잉크를 저장하기 위한 Microsoft.Ink.Ink 개체와 레이어의 색과 숨겨진 상태를 저장하기 위한 System.Drawing.Color부울 값이 포함되어 있습니다. 모든 잉크 계층이 숨겨져 있을 때 InkPicture 의 잉크를 처리하도록 다섯 번째 Ink 개체가 선언됩니다.

' 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;

각 레이어에는 고유한 Ink 개체가 있습니다. 클레임 양식에 4개의 개별 영역(본문, 창, 타이어 및 헤드라이트)이 있으므로 4개의 InkLayer 개체가 사용됩니다. 사용자는 레이어의 조합을 한 번에 볼 수 있습니다.

양식 및 잉크 계층 초기화

Load 이벤트 처리기는 Ink 개체와 4개의 InkLayer 개체를 초기화합니다.

' 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);

그런 다음 목록 상자에서 첫 번째 항목(본문)을 선택합니다.

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

마지막으로 InkPicture 컨트롤의 잉크 색을 현재 선택한 목록 상자 항목으로 설정합니다.

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

InkPicture 컨트롤 다시 그리기

InkPicture 컨트롤의 상속된 그림판 이벤트 처리기에서 잉크 계층을 확인하여 숨겨진 것을 확인합니다. 레이어가 숨겨지지 않은 경우 이벤트 프로시저는 렌더러 속성의 Draw 메서드를 사용하여 계층을 표시합니다. 개체 브라우저를 보면 Microsoft.Ink.InkPicture.Renderer 속성이 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);
        }
    }          
}

목록 상자를 통해 잉크 계층 선택

사용자가 목록 상자에서 항목을 선택하면 SelectedIndexChanged 이벤트 처리기가 먼저 선택 영역이 변경되었으며 InkPicture 컨트롤이 현재 잉크를 수집하지 않는지 확인합니다. 그런 다음 InkPicture 컨트롤의 잉크 색을 선택한 잉크 계층에 적합한 색으로 설정합니다. 또한 선택한 잉크 레이어의 숨겨진 상태 반영하도록 레이어 검사 숨기기 상자를 업데이트합니다. 마지막으로 InkPicture 컨트롤의 상속된 Refresh 메서드는 컨트롤 내에서 원하는 레이어만 표시하는 데 사용됩니다.

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.");
        }
    }
}

잉크 계층의 표시 유형 변경

CheckedChanged 이벤트 처리기는 먼저 선택 영역이 변경되었으며 InkPicture 컨트롤이 현재 잉크를 수집하지 않는지 확인합니다. 그런 다음 선택한 잉크 계층의 숨겨진 상태 업데이트하고 InkPicture 컨트롤의 InkEnabled를 FALSE, 로 설정합니다.

다음으로 InkPicture 컨트롤의 InkEnabled 속성은 Ink 속성을 업데이트하기 전에 FALSE 로 설정됩니다.

마지막으로 계층 검사 숨기기 상자가 선택되었는지 여부에 따라 특정 차량 부분에 대해 InkPicture 컨트롤을 사용하거나 사용하지 않도록 설정하고 InkPicture 컨트롤의 Refresh 메서드를 사용하여 컨트롤 내에서 원하는 레이어만 표시합니다.

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.");
        }
    }
}

양식 닫기

Windows Form Designer 생성된 코드에서 양식이 초기화되면 InkEditInkPicture 컨트롤이 폼의 구성 요소 목록에 추가됩니다. 폼이 닫히면 양식의 Dispose 메서드에 의해 InkEdit 및 InkPicture 컨트롤과 양식의 다른 구성 요소가 삭제됩니다. 폼의 Dispose 메서드는 양식에 대해 만들어진 Ink 개체도 삭제합니다.

Microsoft.Ink.Ink

InkPicture 컨트롤

InkEdit 컨트롤