İ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
aşağıdaki kodu içinde
Form1
yerleştirin:Private WithEvents mWidget As Widget Private mblnCancel As Boolean
WithEvents
anahtar sözcüğü, değişkeninmWidget
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çindeForm1
WithEvents
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 iptalLongTask
etmek için kullanılır.
Bir Olayı İşlemek için Kod Yazma
kullanarak WithEvents
bir 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
Kod Düzenleyicisi'ndeki sol açılan listeden öğesini seçin
mWidget
.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.
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ı denetimdeLabel
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.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 True
ayarlar.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
Kod Düzenleyicisi'ndeki sol açılan listeden (Form1 Olayları) öğesini seçin.
Load
Sağ açılan listeden olayı seçin. Kod Düzenleyicisi olay yordamınıForm1_Load
açar.oluşturmak
Widget
için olay yordamı içinForm1_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 mWidget
ilişkili olay yordamlarına bağlar. Bu noktadan sonra, olayı her Widget
yükselttiğinde PercentDone
mWidget_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 False
ayarlanmalı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 True
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.
PercentDone
Olay 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. deyimi
Click
olay işlemeye izin vereneMy.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 LongTask
ve 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 Form1
LongTask
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 mWidget
neden 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 okuyanmWidget.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 mWidget
atarsanı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.