Vb. Net Gönderen ve e Olay Parametreleri

click fraud protection

VB6'da, Button1_Click gibi bir olay alt programı çok daha az karmaşıktı çünkü sistem alt programı kesinlikle isimle çağırdı. Bir Button1_Click olayı varsa, sistem olayı çağırdı. Doğrudan ve anlaşılır.

Ancak VB.NET'te, VB.NET SOOPercharged (bu "OOP" için Nesne yönelimli programlama).

  1. "Handles" yan tümcesi, sistemin adı değil alt yordamı çağırıp çağırmayacağını denetler.
  2. Gönderen ve e parametreleri alt rutine aktarılır.

Parametrelerin Kullanımı

VB.NET'te parametrelerin yarattığı farkı görmek için basit bir örneğe bakalım.

Özel Alt Düğme1_Click ( 

 ByVal gönderici As System. Nesne,

 ByVal e As Sistemi. EventArgs

 ) Kolları Düğmesi

 'Kodunuz buraya geliyor

End Sub

Olay alt yordamları her zaman bir "gönderen" nesnesi ve bir sistem EventArgs parametresi "e" alır. EventArgs parametresi bir nesne olduğundan, gereken özellikleri ve yöntemleri destekler. Örneğin, eski VB6 MouseMove olayı alt yordamı dört parametre almak için kullanılır:

  • Tamsayı Olarak Düğme
  • Tamsayı Olarak Kaydır
  • X Tek Olarak
  • Y Tek Olarak

Daha gelişmiş fareler daha fazla düğmeyle çıktığında, VB6'nın onları destekleyen gerçek bir sorunu vardı. VB.NET yalnızca bir MouseEventArgs parametresini iletir, ancak çok daha fazla özelliği ve yöntemi destekler. Ve her biri daha da fazlasını destekleyen nesneler. Örneğin, e. Button özelliği tüm bu özellikleri içerir:

instagram viewer

  • Ayrıldı
  • Orta
  • Sağ
  • Yok
  • XButton1
  • XButton2

Birisi "sanal" düğmeyle "aşkın" bir fare çağırırsa, VB.NET'in .NET Framework'ü yalnızca bunu destekleyecek şekilde güncelleştirmesi gerekir ve sonuç olarak önceki kodlar bozulmaz.

Bu parametrelere kesinlikle bağlı olan bir dizi .NET teknolojisi vardır. Örneğin, PC'nizde grafik görüntülemek için genellikle yalnızca tek bir ekran olduğundan, kodunuzun oluşturduğu grafikleri Windows tarafından kullanılan görüntüyle birleştirmesi gerekir. Bu nedenle, tek bir "grafik" nesnesi paylaşılmalıdır. Kodunuzun bu "grafik" nesnesini kullanabilmesinin en önemli yolu, şu e parametresini kullanmaktır: OnPaint etkinliğine geçti PaintEventArgs nesnesiyle.

Korumalı Geçersiz Kılmalar Sub OnPaint (

 ByVal e As Sistemi. Pencereler. Formlar. PaintEventArgs)

 Dim g As Graphics = e. Grafik

Diğer Örnekler

Bu parametrelerle başka ne yapabilirsiniz? Örneklemek gerekirse, bir metin kutusuna girdiğiniz bir dizenin, belki de bir metin kutusuna girdiğiniz bir şeyin, diğer Metin Kutuları koleksiyonlarından herhangi birinde var olup olmadığını bulmak istediğinizi varsayalım. Her bir Metin Kutusu için birkaç düzine neredeyse aynı alt rutini kodlayabilirsiniz:

Eğer TextBox42.Text. İndeksi(

 Arama dizisi. Metin) = -1 

 Sonra NotFound. Metin = 

 "Bulunamadı"

Ama sadece birini kodlamak ve hepsini işlemesine izin vermek çok daha kolay. Gönderen parametresi hangi Metin Kutusunun tıklandığını gösterir.

Özel Alt Bulma (

 ByVal gönderici As System. Nesne,

 ByVal e As Sistemi. EventArgs

 ) TextBox1.Enter, 

 TextBox2.Enter, 

... ve devam ediyor.. .

 TextBox42.Enter

 MyTextbox'ı TextBox olarak karart

myTextbox = gönderen

 Dim IndexChar Tamsayı Olarak = 

 MyTextBox. Metin. İndeksi( 

 Arama dizisi. Metin)

 IndexChar = -1 ise _

 Bulunamadı. Metin = "Bulunamadı" _

 Başka _

 Bulunamadı. Metin = "Bulundu!"

 End Sub

Son zamanlarda, bir programcı "belirtilen altı listeden herhangi birinde tıklanan satırı silmek" için daha iyi bir yol istedi. Beni şaşırtan birkaç düzine kod satırında çalıştı. Ancak göndereni kullanmak gerçekten çok basitti:

Özel Alt ListeBox_Click ( 

 ByVal gönderici As Object olarak, 

 ByVal e As Sistemi. EventArgs

 ) Kolları ListBox1.Click, ListBox2.Click

 MyListBox'ı Yeni Liste Kutusu Olarak Karart

 myListBox = gönderen

 myListBox. Öğeler. RemoveAt (myListBox. Selectedındex)

End Sub

Konuyu işaretlemeye bir örnek daha Belçika'da Pierre tarafından gönderilen bir sorudur. Pierre Button1 ve gönderenin eşitliğini test ediyordu. Dır-dir nesneler için operatör:

Gönderen Button1 ise ...

Bu sözdizimsel olarak doğrudur çünkü gönderen ve Button1 öğelerinin her ikisi de başvurulabilen nesnelerdir. Gönderen gerçekten Button1 ile aynı olduğundan, neden çalışmıyor?

Yanıt, ifadede biraz daha erken bulunan bir anahtar kelimeye bağlıdır. İlk olarak, Microsoft belgelerine bakalım. Dır-dir Şebeke.

Visual Basic iki nesne başvuru değişkenini İş İşleci ile karşılaştırır. Bu işleç, iki referans değişkeninin aynı nesne örneğini gösterip göstermediğini belirler.

Gönderenin geçtiğine dikkat edin ByVal. Bu, gerçek nesnenin kendisi değil, Button1 kopyasının geçirildiği anlamına gelir. Pierre, gönderenin ve Button1'in aynı örnek olup olmadığını test ettiğinde sonuç Yanlış olur.

Button1 veya Button2 tıklatıldığını sınamak için, göndereni gerçek bir Button nesnesine dönüştürmeniz ve sonra bu nesnenin bir özelliğini sınamanız gerekir. Metin genellikle kullanılır, ancak Etiket'te ve hatta Konum özelliğinde bir değeri test edebilirsiniz.

Bu kod çalışır:

MyButton Farklı Düğme

myButton = gönderen

Eğer myButton. Metin = "Button1" Ardından

instagram story viewer