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.
İlgili konular