İzlenecek yol: Olayları İşleme (Visual Basic)
İkinci olayları ile çalışmak nasıl gösteren iki konu budur.İlk konu, izlenecek yol: bildirmek ve yükseltmeyi olayları, nasıl bildirmek ve olaylarını gösterir.Bu bölümde formu ve bu yönergeyi sınıfından yer alırken olaylar ne yapacağınızı göstermek için kullanır.
Widget Sınıf örnek geleneksel olay işleme ifadeleri kullanır.Visual Basicolayları ile çalışmak için başka teknikler sağlar.Bir alıştırma olarak kullanmak için bu örneği değiştirmek AddHandler ve Handles deyimleri.
Pencere öğesi sınıfının PercentDone olayý iþlemek için
Aşağıdaki kodda koyun Form1:
Private WithEvents mWidget As Widget Private mblnCancel As Boolean
WithEvents Anahtar sözcüğünü belirtir değişken mWidget bir nesnenin olayları işlemek için kullanılacaktır.Nesne türü nesne Oluşturulacak sınıfın adını sağlayarak belirtin.
Değişken mWidget içinde bildirilen Form1 çünkü WithEvents değişkenleri sınıf düzeyinde olması gerekir.Bu, bunların içine yerleştirin sınıf türü ne olursa olsun doğrudur.
Değişken mblnCancel iptal etmek için kullanılan LongTask yöntemi.
Bir olayı işlemek için kod yazma
Bir değişken kullanarak bildirmek gibi WithEvents, değişken adını sınıfının Sol aşağıya açılan listesinde görüntülenen Kod Düzenleyicisi'ni.Seçtiğinizde, mWidget, Widget sınıfının olaylarını sağdaki açılır listede görünür.Bir olayı seçilmesi öneki ile ilgili olay yordamını görüntüler mWidget ve alt çizgi.İlişkili olay yordamları bir WithEvents değişkeni değişken adı öneki olarak verilmiştir.
Bir olayı işlemek için
Seçin mWidget sol aşağı açılan listesindeki Kod Düzenleyicisi'ni.
Seçin PercentDone saðdaki açýlan listeden olay.Kod Düzenleyicisi'ni açılır mWidget_PercentDone olay yordamı.
[!NOT]
Kod Düzenleyicisi'ni yararlı, ancak gerekli değildir, yeni olay işleyicileri eklemek için.Bu izlenecek yolda, kodunuzu doğrudan olay işleyicileri yalnızca kopyalamak Daha kestirmedir.
Aşağıdaki kodu ekleyip mWidget_PercentDone olay işleyicisi:
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
Her PercentDone olay ortaya, olay yordamını, tamamlanma yüzdesini görüntüler bir Label denetim.DoEvents Yöntemi yeniden boyamak etiketi sağlar ve aynı zamanda kullanıcı tıklatın veriyor İptal düğme.
İçin aşağıdaki kodu ekleyip Button2_Click olay işleyicisi:
Private Sub Button2_Click( ByVal sender As Object, ByVal e As System.EventArgs ) Handles Button2.Click mblnCancel = True End Sub
Kullanıcı tıklattığında İptal sırasında düğmesini LongTask çalışıyor, Button2_Click olay yürütüldüğünde hemen DoEvents deyimi gerçekleşmesi olay işleme izin verir.Sınıf düzeyi değişkeni mblnCancel ayarlamak Trueve mWidget_PercentDone olay daha sonra onu sınar ve ayarlar ByRef Cancel bağımsız değişkeni True.
WithEvents değişkeni bir nesne bağlanma
Form1Şimdi işlemek üzere ayarlanmış bir Widget nesnenin olayları.Geriye kalan tek şey bulmak için bir Widget yerde.
Bir değişken bildirmek ne zaman WithEvents tasarım zamanında hiçbir nesne ile ilişkili.A WithEvents yalnızca herhangi bir başka nesne değişkeni gibi değişkendir.Bir nesne oluşturur ve onunla bir başvuru atamak zorunda WithEvents değişkeni.
Bir nesne oluşturmak ve bir referansı atamak için
Seçin (Form1 olayları) sol aşağı açılan listesindeki Kod Düzenleyicisi'ni.
Seçin Load saðdaki açýlan listeden olay.Kod Düzenleyicisi'ni açılır Form1_Load olay yordamı.
İçin aşağıdaki kodu ekleyip Form1_Load olay yordamı oluşturmak için Widget:
Private Sub Form1_Load( ByVal sender As System.Object, ByVal e As System.EventArgs ) Handles MyBase.Load mWidget = New Widget End Sub
Bu kodu yürütüldüğünde, Visual Basic oluşturur bir Widget object ve ilişkili olay yordamlarını olaylarını bağlandığı mWidget.Noktayı, her Widget harekete geçiren kendi PercentDone olay, mWidget_PercentDone olay yordamı gerçekleştirilir.
LongTask yöntemi
Aşağıdaki kodu ekleyip Button1_Click olay işleyicisi:
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
Önce LongTask yöntemi çağrılır, tamamlanma yüzdesi görüntüler başlatılmalıdır etiket ve sınıf düzeyi Boolean iptal etme yöntemi ayarlanmalıdır için bayrak False.
LongTask12.2 saniyede bir görev süresi ile adlandırılır.PercentDone Olay ortaya bir kez her üçte biri.Olay harekete geçirilen, her zaman mWidget_PercentDone olay yordamı gerçekleştirilir.
Zaman LongTask yapılır, mblnCancel olup olmadığını test LongTask normal olarak sona erdi veya nedeniyle durduruldu, mblnCancel ayarlandığı True.Tamamlanma yüzdesi yalnızca birincisinde güncelleştirilir.
Programı çalıştırmak için
Proje çalışma moduna getirmek için F5 tuşuna basın.
Tıklatın Görevi Başlat düğme.Her zaman PercentDone olay ortaya, etiketi tamamlandığında görevin yüzdesi güncelleştirilir.
Tıklatın İptal görevi Durdur düğmesi.Dikkat görünümünü İptal düğmesini tıklattığınız zaman hemen değiştirmez.Click Olay olamaz kadar ortaya My.Application.DoEvents deyimi, olay işleme izin verir.
[!NOT]
My.Application.DoEvents Yöntemi işleme olayları tam olarak aynı şekilde form yaptığı gibi.Örneğin, Bu izlenecek yolda, tıklatmalısınız İptal iki kez düğme.Form doğrudan olayları işlemek izin vermek için kullanabileceğiniz çoklu kullanım.Daha fazla bilgi için bkz. İş Parçacığı Oluşturma (C# ve Visual Basic).
F11 ile programı çalıştırın ve bir kerede bir satır kod boyunca adım yönergeli bulabilirsiniz.Yürütme nasıl girdiği açıkça görebilirsiniz LongTask, kısaca akışına yeniden girer ve Form1 her zaman PercentDone olay ortaya.
Neler olacağını Eğer yürütme kodda geri doğrulanırken, Form1, LongTask yöntemi adlı yeniden?En kötü olasılıkla bir yığın taşması oluşabilir LongTask olay Sürüldü her zaman denir.
Değişken neden olabilir mWidget için farklı bir olayları işlemek için Widget yeni bir başvuru atayarak nesneyi Widget için mWidget.Kod, aslında yapmak Button1_Click düğmesini her zaman bunu yapmak.
Farklı bir pencere öğesi için olayları işlemek için
Aşağıdaki kod satırını ekleyin Button1_Click okur hattı hemen önceki yordamı, mWidget.LongTask(12.2, 0.33):
mWidget = New Widget ' Create a new Widget object.
Yukarıdaki kod oluşturur Yeni bir Widget düğmesi tıklatıldığında her zaman.Hemen LongTask yöntemi tamamlandığında, başvuru Widget serbest bırakılır ve Widget yok edilir.
A WithEvents değişkeni, bir kerede yalnızca bir nesne başvurusu içerebilir bunu farklı bir atarsanız, Widget itiraz mWidget, önceki Widget nesnenin olaylar artık işleneceğini.mWidget Eski bir başvuru içeren tek nesne değişkeni olan Widget, nesne yok.Birkaç olaylarını işlemek isterseniz, Widget nesneler, AddHandler olayları her nesneye ayrı ayrı işlemek için deyimi.
[!NOT]
Çok bildirebilirsiniz WithEvents olarak, değişkenler gerekir, dizileri WithEvents değişkenleri desteklenmiyor.
Ayrıca bkz.
Görevler
İzlenecek yol: Olay Bildirme ve Oluşturma (Visual Basic)