Aracılığıyla paylaş


Adım Adım Kılavuz: Olayların Yönetimi (Visual Basic)

Bu, olaylarla nasıl çalışıldığını gösteren iki konu başlığından ikincisidir. İlk konu başlığı olan İzlenecek Yol: Olayları Bildirme ve Oluşturma, olayları bildirmeyi ve tetiklemeyi gösterir. Bu bölümde, olay gerçekleştiğinde olayların nasıl işleneceğini göstermek için bu kılavuzdaki form ve sınıf kullanılır.

Sınıf Widget örneği geleneksel olay işleme deyimlerini kullanır. Visual Basic, olaylarla çalışmak için başka teknikler sağlar. Alıştırma olarak, bu örneği AddHandler ve Handles deyimlerini kullanacak şekilde değiştirebilirsiniz.

Widget sınıfının PercentDone olayını işlemek için

  1. Aşağıdaki kodu Form1 içine yerleştirin.

    Private WithEvents mWidget As Widget
    Private mblnCancel As Boolean
    

    WithEvents anahtar sözcüğü, değişkenin mWidget bir nesnenin olaylarını işlemek için kullanıldığını belirtir. Nesnenin oluşturulacağı sınıfın adını sağlayarak nesne türünü belirtirsiniz.

    Değişken mWidget, Form1 içinde bildirilir çünkü WithEvents değişkenlerinin sınıf düzeyinde olması gerekir. Bu, bunları yerleştirdiğiniz sınıfın türünden bağımsız olarak geçerlidir.

    mblnCancel değişkeni LongTask yöntemini iptal etmek için kullanılır.

Bir Olayı İşlemek için Kod Yazma

kullanarak WithEventsbir değişken bildirdiğiniz anda, değişken adı sınıfın Kod Düzenleyicisi'nin sol açılan listesinde görünür. öğesini seçtiğinizde mWidget, sınıfın Widget olayları sağ açılan listede görünür. Bir olay seçildiğinde, ön ek mWidget ve alt çizgi ile ilgili olay yordamı görüntülenir. Bir WithEvents değişkenle ilişkili tüm olay yordamlarına ön ek olarak değişken adı verilir.

Bir olayı ele almak için

  1. mWidget sol açılan listeden öğesini seçin.

  2. Sağda bulunan açılır listeden PercentDone olayını seçin. Kod Düzenleyicisi olay yordamını mWidget_PercentDone açar.

    Uyarı

    Kod Düzenleyicisi, yeni olay işleyicileri eklemek için kullanışlıdır ancak gerekli değildir. Bu kılavuzda, olay işleyicilerini doğrudan kodunuza kopyalamak daha doğrudan bir yöntemdir.

  3. Olay işleyicisine mWidget_PercentDone aşağıdaki kodu ekleyin:

    Private Sub mWidget_PercentDone(
        ByVal Percent As Single,
        ByRef Cancel As Boolean
    ) Handles mWidget.PercentDone
        lblPercentDone.Text = CInt(100 * Percent) & "%"
        My.Application.DoEvents()
        If mblnCancel Then Cancel = True
    End Sub
    

    PercentDone etkinliği her tetiklendiğinde, olay prosedürü Label denetimi üzerinde tamamlanma yüzdesini görüntüler. DoEvents yöntemi etiketin yeniden boyanmasını sağlar ve kullanıcıya İptal düğmesine tıklama fırsatı verir.

  4. Olay işleyicisi Button2_Click için aşağıdaki kodu ekleyin:

    Private Sub Button2_Click(
        ByVal sender As Object,
        ByVal e As System.EventArgs
    ) Handles Button2.Click
        mblnCancel = True
    End Sub
    

Kullanıcı çalışırken LongTask düğmesine tıklarsa, Button2_Click ifadesi olay işlemesine izin verir vermez DoEvents olayı yürütülür. Sınıf düzeyi değişkeni mblnCancel olarak ayarlanır ve True, ardından mWidget_PercentDone olayı bunu test eder ve ByRef Cancel bağımsız değişkenini True olarak ayarlar.

Bir WithEvents Değişkenlerini Bir Nesneye Bağlama

Form1 artık bir Widget nesnenin olaylarını işleyecek şekilde ayarlanmıştır. Geriye sadece bir Widget bir yerlerde bulmak kaldı.

Tasarım zamanında bir değişken WithEvents bildirdiğinizde, hiçbir nesne onunla ilişkilendirilmemiş olur. Değişken WithEvents , diğer nesne değişkenlerine benzer. Bir nesne oluşturmanız ve değişkeniyle WithEvents bu nesneye bir başvuru atamanız gerekir.

Bir nesne oluşturmak ve ona bir referans atamak için

  1. Kod Düzenleyicisi'ndeki sol açılan listeden (Form1 Olayları) öğesini seçin.

  2. Sağda bulunan açılır listeden Load olayını seçin. Kod Düzenleyicisi olay yordamını Form1_Load açar.

  3. Form1_Load oluşturmak için Widget olay yordamı için aşağıdaki kodu ekleyin:

    Private Sub Form1_Load(
        ByVal sender As System.Object,
        ByVal e As System.EventArgs
    ) Handles MyBase.Load
        mWidget = New Widget
    End Sub
    

Bu kod çalıştırıldığında Visual Basic bir Widget nesne oluşturur ve olaylarını mWidget ile ilişkili olay yordamlarına bağlar. Bu noktadan itibaren, Widget her PercentDone olayını tetiklediğinde, mWidget_PercentDone olay prosedürü yürütülür.

LongTask yöntemini çağırmak için

  • Olay işleyicisine Button1_Click aşağıdaki kodu ekleyin:

    Private Sub Button1_Click(
        ByVal sender As Object,
        ByVal e As System.EventArgs
    ) Handles Button1.Click
        mblnCancel = False
        lblPercentDone.Text = "0%"
        lblPercentDone.Refresh()
        mWidget.LongTask(12.2, 0.33)
        If Not mblnCancel Then lblPercentDone.Text = CStr(100) & "%"
    End Sub
    

LongTask Yöntemi çağrılmadan önce tamamlanma yüzdesini görüntüleyen etiket başlatılmalıdır ve yöntemi iptal etmek için sınıf düzeyi Boolean bayrağı olarak Falseayarlanmalıdır.

LongTask 12,2 saniyelik görev süresiyle çağrılır. PercentDone olayı her saniyenin üçte biri sürede bir kez tetiklenir. Olay her tetiklendiğinde olay mWidget_PercentDone yordamı yürütülür.

Tamamlandığında LongTask, mblnCancel, LongTask normal şekilde sona erdi mi, yoksa mblnCancel, True olarak ayarlandığı için mi durdu, görmek amacıyla test edilir. Tamamlanma yüzdesi yalnızca önceki örnekte güncelleştirilir.

Programı çalıştırmak için

  1. Projeyi çalıştırma moduna almak için F5 tuşuna basın.

  2. Görevi Başlat düğmesine tıklayın. PercentDone Olay her tetiklendiğinde, etiket tamamlanan görevin yüzdesiyle güncelleştirilir.

  3. Görevi durdurmak için İptal düğmesine tıklayın. İptal düğmesinin görünümünün tıkladığınızda hemen değişmediğini görebilirsiniz. Click olayı, My.Application.DoEvents deyimi olay işlemeye izin verene kadar gerçekleşemez.

    Uyarı

    yöntemi, My.Application.DoEvents olayları formla tam olarak aynı şekilde işlemez. Örneğin, bu kılavuzda İptal düğmesine iki kez tıklamanız gerekir. Formun olayları doğrudan işlemesine izin vermek için çoklu iş parçacığı kullanımını kullanabilirsiniz. Daha fazla bilgi için bkz. Yönetilen İş Parçacığı Oluşturma.

Programı F11 ile çalıştırarak ve kodda satır satır ilerleyerek adım atmayı öğretici bulabilirsiniz. Yürütmenin LongTask'a nasıl girdiğini ve Form1 olayı her tetiklendiğinde PercentDone'a kısa bir süre yeniden girdiğini net bir şekilde görebilirsiniz.

Eğer yürütme Form1 koduna geri dönmüşken LongTask metodu yeniden çağrılırsa ne olur? En kötü ihtimalle, LongTask her olay tetiklendiğinde çağrılırsa, yığın taşması oluşabilir.

Yeni mWidget içindeki bir başvuruyu Widget'e atayarak, Widget değişkeninin farklı bir mWidget nesnesinin olaylarını işlemesini sağlayabilirsiniz. Aslında, içindeki kodun Button1_Click düğmeye her tıkladığınızda bunu yapmasını sağlayabilirsiniz.

Farklı bir pencere öğesinin etkinliklerini işlemek için

  • Aşağıdaki kod satırını yordama Button1_Click ekleyin ve mWidget.LongTask(12.2, 0.33) satırından hemen önce yerleştirin.

    mWidget = New Widget
    ' Create a new Widget object.
    

Yukarıdaki kod, düğmeye her tıklandığında yeni Widget bir kod oluşturur. LongTask yöntemi tamamlanır tamamlanmaz, Widget öğesine olan referans serbest bırakılır ve Widget yok edilir.

Bir WithEvents değişken aynı anda yalnızca bir nesne başvurusu içerebilir, bu nedenle öğesine farklı Widget bir nesne mWidgetatarsanız, önceki Widget nesnenin olayları artık işlenmez. Eski mWidgetöğesine başvuru içeren tek nesne değişkeni iseWidget, nesne yok edilir. Birkaç Widget nesneden gelen olayları işlemek istiyorsanız, her nesneden olayları ayrı ayrı işlemek için deyimini AddHandler kullanın.

Uyarı

İstediğiniz kadar WithEvents değişken bildirebilirsiniz, ancak değişken dizileri WithEvents desteklenmez.

Ayrıca bakınız