Aracılığıyla paylaş


Otomatik Talep Formu Örneği

Araç Hasar Talepleri örneği, sigorta uzmanı için varsayımsal bir senaryoyu ele alır. Değerlendiricinin işi, müşterileri kendi evlerinde veya iş yerlerinde ziyaret etmesini ve talep bilgilerini bir forma kaydetmesini gerektirir. Değerlendiricinin üretkenliğini artırmak için BT departmanı, iki mürekkep denetimi aracılığıyla talep bilgilerini hızlı ve doğru bir şekilde girmesini sağlayan bir tablet uygulaması geliştirmektedir: InkEdit ve InkPicture denetimleri.

Bu örnekte, her metin giriş alanı için bir InkEdit denetimi kullanılır. Bir kullanıcı, sigorta poliçesi ve araçla ilgili bilgileri kalemle bu alanlara girer. InkPicture denetimi, otomobilin hasarlı alanlarını vurgulamak için bir otomobil görüntüsü üzerine mürekkep eklemek için kullanılır. Otomatik Talepler örneği C# ve Microsoft Visual Basic .NET için kullanılabilir. Bu konuda Visual Basic .NET açıklanmaktadır.

AutoClaims Sınıfı, System.Windows.Forms.Form alt sınıfı olarak tanımlanır ve farklı hasar türleri için mürekkep katmanları oluşturmak ve yönetmek için iç içe geçmiş bir sınıf tanımlanır. Aşağıdaki görevleri gerçekleştirmek için dört olay işleyicisi tanımlanır:

  • Form ve mürekkep katmanlarını başlatma.
  • InkPicture denetimini yeniden çizme.
  • Liste kutusu aracılığıyla bir mürekkep katmanı seçme.
  • Mürekkep katmanının görünürlüğünü değiştirme.

Not

Bu örneğin sürümleri C# ve Visual Basic .NET'te kullanılabilir. Bu bölümde ele alınan sürüm Visual Basic .NET'tir. Kavramlar sürümler arasında aynıdır.

 

Form ve Mürekkep Katmanlarını Tanımlama

Microsoft.Ink ad alanını içeri aktarmanız gerekir:

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

Ardından AutoClaims Sınıfında iç içe geçmiş bir InkLayer sınıfı tanımlanır ve dört InkLayer nesneden oluşan bir dizi bildirilir. (InkLayer, mürekkep depolamak için bir Microsoft.Ink.Ink nesnesi ve katmanın rengini ve gizli durumunu depolamak için System.Drawing.Color ve Boolean değerlerini içerir.) Mürekkep katmanlarının tümü gizlendiğinde InkPicture için mürekkebi işlemek üzere beşinci bir Ink nesnesi bildirilir.

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

Her katmanın kendi Mürekkep nesnesi vardır. Talep formunda dört ayrı ilgi alanı vardır (gövde, pencereler, lastikler ve farlar), bu nedenle dört InkLayer nesnesi kullanılır. Bir kullanıcı, katmanların herhangi bir bileşimini aynı anda görüntüleyebilir.

Form ve Mürekkep Katmanlarını Başlatma

Load olay işleyicisi, Ink nesnesini ve dört InkLayer nesnesini başlatır.

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

Ardından, liste kutusundaki ilk girdiyi (Gövde) seçin.

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

Son olarak, InkPicture denetiminin mürekkep rengini seçili durumdaki liste kutusu girdisine ayarlayın.

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

InkPicture Kontrolünü Yeniden Çizme

InkPicture Denetimi'nin devralınan Paint olay işleyicisinde, hangilerinin gizlendiğini belirlemek için mürekkep katmanları kontrol edilir. Katman gizli değilse olay yordamı, oluşturucu özelliğinin Draw yöntemini kullanarak bunu görüntüler. Nesne Tarayıcısı'na bakarsanız Microsoft.Ink.InkPicture.Renderer özelliğinin Microsoft.Ink.Renderer nesnesi olarak tanımlandığını görürsünüz:

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

Liste Kutusu aracılığıyla Mürekkep Katmanı Seçme

Kullanıcı liste kutusunda bir öğe seçtiğinde, SelectedIndexChanged olay işleyicisi önce seçimin değiştiğini ve InkPicture denetiminin şu anda mürekkep toplamadığını denetler. Ardından InkPicture denetiminin mürekkep rengini seçili mürekkep katmanı için uygun renge ayarlar. Ayrıca, Seçilen mürekkep katmanının gizli durumunu yansıtacak şekilde Katmanı Gizle onay kutusunu güncelleştirir. Son olarak, InkPicture denetiminin devralınan Refresh yöntemi, denetim içinde yalnızca istenen katmanları görüntülemek için kullanılır.

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

Mürekkep Katmanının Görünürlüğünü Değiştirme

CheckedChanged olay işleyicisi önce seçimin değiştiğini ve InkPicture denetiminin şu anda mürekkep toplamadığını denetler. Ardından seçili mürekkep katmanının gizli durumunu güncelleştirir, InkPicture denetiminin InkEnabled değerini FALSE olarak ayarlar.

Ardından, InkPicture denetiminin InkEnabled özelliği FALSE olarak ayarlanır, sonra Ink özelliği güncellenir.

Son olarak, InkPicture denetimi, Katmanı Gizle onay kutusunun seçili olup olmamasına bağlı olarak belirli bir araç parçası için etkinleştirilir veya devre dışı bırakılır ve inkPicture denetiminin Yenileme yöntemi yalnızca denetim içinde istenen katmanları görüntülemek için kullanılır.

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

Formu Kapatma

Windows Form Tasarımcısı tarafından oluşturulan kodda, form başlatıldığında InkEdit ve InkPicture denetimleri formun bileşen listesine eklenir. Form kapatıldığında InkEdit ve InkPicture denetimleri ile formun diğer bileşenleri, formun Dispose yöntemi tarafından bertaraf edilir. Form nesnesinin Dispose yöntemi, form için oluşturulan Mürekkep nesnelerini de atar.

Microsoft.Ink.Ink

InkPicture Kontrolü

InkEdit Denetimi