İzlenecek yol: Olayları İşleme (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 ve Handles deyimlerini kullanacak AddHandler şekilde değiştirebilirsiniz.

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

  1. aşağıdaki kodu içinde Form1yerleş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şkenlerin mWidget sınıf düzeyinde olması gerektiğinden değişkeni içinde Form1WithEvents bildirilir. Bu, bunları yerleştirdiğiniz sınıfın türünden bağımsız olarak geçerlidir.

    değişkeni mblnCancel yöntemi iptal LongTask 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ı işlemek için

  1. Kod Düzenleyicisi'ndeki sol açılan listeden öğesini seçinmWidget.

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

    Not

    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 kodunuz içine kopyalamak daha doğrudan yapılır.

  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 Olay her tetiklendiğinde, olay yordamı denetimde Label 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 İptal düğmesine LongTask tıklarsa, Button2_Click deyim olay işlemenin gerçekleşmesine izin verir vermez DoEvents olay yürütülür. Sınıf düzeyi değişkeni mblnCancel olarak ayarlanır ve mWidget_PercentDone olay bunu test eder ve bağımsız değişkenini ByRef Cancel olarak Trueayarlar.True

Bir Nesneye WithEvents Değişkeni Bağlan

Form1 artık bir Widget nesnenin olaylarını işleyecek şekilde ayarlanmıştır. Geriye sadece bir Widget yer 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 nesneye başvuru atamak için

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

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

  3. oluşturmak Widgetiçin olay yordamı için Form1_Load 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 yürütürken Visual Basic bir Widget nesne oluşturur ve olaylarını ile mWidgetilişkili olay yordamlarına bağlar. Bu noktadan sonra, olayı her Widget yükselttiğinde PercentDonemWidget_PercentDone olay yordamı 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. Olay PercentDone , saniyenin üçte biri bir kez oluşturulur. Olay her tetiklendiğinde olay mWidget_PercentDone yordamı yürütülür.

tamamlandığında LongTask , mblnCancel normal şekilde sonlandırılıp sonlandırılamadığını LongTask veya olarak ayarlandığı için mblnCancel durdurulup durdurulmadığını görmek için Truetest 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. deyimi Click olay işlemeye izin verene My.Application.DoEvents kadar olay gerçekleşemez.

    Not

    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ırmayı ve kodda bir kerede bir satır boyunca adım atmasını öğretici bulabilirsiniz. Yürütmenin öğesine nasıl girdiğini LongTaskve olay her PercentDone başlatıldığında kısa bir süre yeniden girdiğini Form1 net bir şekilde görebilirsiniz.

Yürütme koduna Form1LongTask geri dönerken yöntemi yeniden çağrılırsa ne olur? En kötü ihtimalle, olay her başlatıldığında çağrılırsa LongTask yığın taşması oluşabilir.

değişkeninin mWidget yeni Widget öğesine bir başvuru atayarak farklı Widget bir nesnenin olaylarını işlemesine mWidgetneden olabilirsiniz. Aslında, içindeki kodun Button1_Click düğmeye her tıkladığınızda bunu yapmasını sağlayabilirsiniz.

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

  • Aşağıdaki kod satırını yordama Button1_Click ekleyin ve bunu okuyan mWidget.LongTask(12.2, 0.33)satırın hemen önüne ekleyin:

    mWidget = New Widget
    ' Create a new Widget object.
    

Yukarıdaki kod, düğmeye her tıklandığında yeni Widget bir kod oluşturur. Yöntem tamamlanır tamamlanmaz LongTask öğesine başvuru Widget 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 Widgetöğesine başvuru içeren tek nesne değişkeni isemWidget, 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.

Not

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

Ayrıca bkz.