Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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
Aşağıdaki kodu
Form1içine yerleştirin.Private WithEvents mWidget As Widget Private mblnCancel As BooleanWithEventsanahtar sözcüğü, değişkeninmWidgetbir 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,Form1içinde bildirilir çünküWithEventsdeğ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.mblnCanceldeğişkeniLongTaskyö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
mWidgetsol açılan listeden öğesini seçin.Sağda bulunan açılır listeden
PercentDoneolayını seçin. Kod Düzenleyicisi olay yordamınımWidget_PercentDoneaç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.
Olay işleyicisine
mWidget_PercentDoneaş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 SubPercentDoneetkinliği her tetiklendiğinde, olay prosedürüLabeldenetimi üzerinde tamamlanma yüzdesini görüntüler.DoEventsyöntemi etiketin yeniden boyanmasını sağlar ve kullanıcıya İptal düğmesine tıklama fırsatı verir.Olay işleyicisi
Button2_Clickiç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
Kod Düzenleyicisi'ndeki sol açılan listeden (Form1 Olayları) öğesini seçin.
Sağda bulunan açılır listeden
Loadolayını seçin. Kod Düzenleyicisi olay yordamınıForm1_Loadaçar.Form1_Loadoluşturmak içinWidgetolay 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_Clickaş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
Projeyi çalıştırma moduna almak için F5 tuşuna basın.
Görevi Başlat düğmesine tıklayın.
PercentDoneOlay her tetiklendiğinde, etiket tamamlanan görevin yüzdesiyle güncelleştirilir.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.
Clickolayı,My.Application.DoEventsdeyimi olay işlemeye izin verene kadar gerçekleşemez.Uyarı
yöntemi,
My.Application.DoEventsolayları 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_Clickekleyin vemWidget.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.