İzlenecek yol: Olayları İşleme (Visual Basic)

Bu, etkinliklerle nasıl çalışabileceğini gösteren iki konunun ikinci konudır. Izlenecek yol: Izlenecek yol: olayları bildirme veoluşturma, olayların nasıl bildirilemeyeceğini ve tetikleyeceğinizi gösterir. Bu bölüm, bu kılavuzda yer alan formu ve sınıfı kullanır.

WidgetSınıf örneği geleneksel olay işleme deyimlerini kullanır. Visual Basic olaylarla çalışmaya yönelik başka teknikler de sağlar. Bir alıştırma olarak, ve deyimlerini kullanmak için bu örneği değiştirebilirsiniz AddHandler Handles .

Pencere öğesi sınıfının PercentDone olayını işlemek için

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

    Private WithEvents mWidget As Widget
    Private mblnCancel As Boolean
    

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

    mWidget Form1 Değişkenler sınıf düzeyi olması gerektiğinden değişken içinde olarak belirtilir WithEvents . Bu, yerleştirdiğiniz sınıf türünden bağımsız olarak geçerlidir.

    Değişkeni, mblnCancel yöntemi iptal etmek için kullanılır LongTask .

Bir olayı Işlemek için kod yazma

Kullanarak bir değişken bildirdikten hemen sonra WithEvents , sınıfın kod düzenleyicisinin sol açılır listesinde değişken adı belirir. Seçtiğinizde mWidget , Widget sınıfın olayları sağ açılan listede görüntülenir. Bir olay seçilmesi, ilgili olay yordamını önek mWidget ve alt çizgi ile görüntüler. Bir değişkenle ilişkili tüm olay yordamlarına WithEvents önek olarak değişken adı verilir.

Bir olayı işlemek için

  1. mWidget Kod düzenleyicisinde sol aşağı açılan listeden seçim yapın.

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

    Not

    Kod Düzenleyicisi , yeni olay işleyicileri eklemek için yararlıdır, ancak gerekli değildir. Bu kılavuzda, yalnızca olay işleyicilerini doğrudan kodunuza kopyalamak daha doğrudan bir örnek olur.

  3. Aşağıdaki kodu mWidget_PercentDone olay işleyicisine 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
    

    Olay gerçekleştiğinde PercentDone olay yordamı bir denetimdeki tamamlanma yüzdesini gösterir Label . DoEventsYöntemi etiketin yeniden çizileceğü sağlar ve kullanıcıya iptal düğmesine tıklama fırsatı verir.

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

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

Kullanıcı çalışırken iptal düğmesine tıkladığında LongTask , etkinlik Button2_Click DoEvents olay işlemenin oluşmasına izin verdiği anda olay yürütülür. Sınıf düzeyi değişkeni mblnCancel olarak ayarlanır True ve mWidget_PercentDone olay bundan sonra test eder ve ByRef Cancel bağımsız değişkenini olarak ayarlar True .

Bir WithEvents değişkenini bir nesneye bağlama

Form1 Artık bir nesnenin olaylarını işleyecek şekilde ayarlanır Widget . Her şey bir yerde bulunmaya devam etmektedir Widget .

Tasarım zamanında bir değişken bildirdiğinizde WithEvents , onunla ilişkili bir nesne yoktur. WithEventsDeğişken, tıpkı diğer nesne değişkenleri gibi. Bir nesnesi oluşturmanız ve değişkenine bir başvuru atamanız gerekir WithEvents .

Bir nesne oluşturmak ve buna bir başvuru atamak için

  1. Kod düzenleyicisinde sol aşağı açılan listeden (Form1 olayları) öğesini seçin.

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

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

    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üldüğünde, Visual Basic bir nesnesi oluşturur Widget ve olaylarını ile ilişkili olay yordamlarına bağlar mWidget . Bu noktadan itibaren, olayı her ne zaman Widget oluşturur PercentDone mWidget_PercentDone olay yordamı yürütülür.

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

  • Aşağıdaki kodu Button1_Click olay işleyicisine 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
    

LongTaskYöntemi çağrılmadan önce, tamamlanma yüzdesini gösteren etiketin başlatılması ve Boolean yöntemin iptal edilmesi için sınıf düzeyi bayrağının olarak ayarlanması gerekir False .

LongTask , 12,2 saniyelik bir görev süresiyle çağrılır. PercentDoneOlay, saniyenin her biri üçte bir kez tetiklenir. Olay her oluşturulduğunda mWidget_PercentDone olay yordamı yürütülür.

İşiniz LongTask bittiğinde, mblnCancel LongTask normal olarak mı sonlandırıldığı, yoksa durdurulmuş mi olduğunu görmek için test edilmiştir mblnCancel True . Tamamlanma yüzdesi yalnızca önceki durumda güncelleştirilir.

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

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

  2. Görevi Başlat düğmesine tıklayın. PercentDoneOlay her oluşturulduğunda etiket, tamamlanan görevin yüzdesine göre güncelleştirilir.

  3. Görevi durdurmak için iptal düğmesine tıklayın. İptal düğmesinin görünümü tıkladığınızda hemen değişmediğine dikkat edin. ClickEtkinlik My.Application.DoEvents Olay işlemeye izin verdiğinden olay gerçekleşmeyecek.

    Not

    My.Application.DoEventsYöntemi, olayları yalnızca formla aynı şekilde işlemez. Örneğin, bu kılavuzda, iptal 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 Iş parçacığı.

Programı F11 ile çalıştırmaya ve bir kerede bir satırda bir satır adım adım ilerlebileceğinizi fark edebilirsiniz. Yürütmenin nasıl girdiğini açıkça görebilir LongTask ve Form1 olay her oluşturulduğunda kısa bir süre sonra yeniden girebilirsiniz PercentDone .

Yürütme kodunda geri yüklenirken ne olur Form1 LongTask ?, yöntem yeniden çağırılır mi? En kötü, LongTask olay her oluştuğunda çağrılırsa bir yığın taşması meydana gelebilir.

mWidget Widget Yeni öğesine bir başvuru atayarak, değişkenin farklı bir nesne için olayları işlemesine neden olabilirsiniz Widget mWidget . Aslında, Button1_Click düğmeye her tıkladığınızda kodu bunu yapabilirsiniz.

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

  • Aşağıdaki kod satırını, şu şekilde Button1_Click görüntülenen satırdan hemen önce ekleyin mWidget.LongTask(12.2, 0.33) :

    mWidget = New Widget
    ' Create a new Widget object.
    

Yukarıdaki kod, düğme tıklandığında yeni bir oluşturur Widget . Yöntemi tamamlandıktan hemen sonra, LongTask başvurusu serbest bırakılır ve yok edilir Widget Widget .

Bir WithEvents değişken tek seferde yalnızca bir nesne başvurusu içerebilir, bu nedenle ' ye farklı bir nesne atarsanız Widget mWidget , önceki Widget nesnenin olayları artık işlenmeyecek. Eğer mWidget eski bir başvuruyu içeren tek nesne değişkense Widget , nesne yok edilir. Çeşitli nesnelerden olayları işlemek istiyorsanız Widget , AddHandler her bir nesneden olayları ayrı olarak işlemek için ifadesini kullanın.

Not

WithEventsİhtiyaç duyduğunuz kadar çok değişken bildirebilirsiniz, ancak WithEvents değişkenlerin dizileri desteklenmez.

Ayrıca bkz.