Vb. Pengirim Bersih dan Parameter Acara

Di VB6, sebuah subroutine acara, seperti Button1_Click, jauh lebih rumit karena sistem menyebut subrutin dengan ketat berdasarkan nama. Jika acara Button1_Click ada, sistem menyebutnya. Ini langsung dan langsung.

Namun di VB.NET, ada dua peningkatan besar yang dilakukan VB.NET SOOPdiisi daya (itulah "OOP" untuk Pemrograman berorientasi objek).

  1. Klausa "Menangani" mengontrol apakah sistem memanggil subrutin, bukan nama.
  2. Parameter pengirim dan e diteruskan ke subrutin.

Penggunaan Parameter

Mari kita lihat contoh sederhana untuk melihat perbedaan yang dibuat parameter di VB.NET.

Sub Pribadi Tombol1_Klik ( 

 Pengirim ByVal Sebagai Sistem. Obyek,

 ByVal e As System. EventArgs

 ) Menangani Tombol1.Klik

 'Kode Anda ada di sini

End Sub

Subrutin acara selalu menerima objek "pengirim" dan parameter EventArgs sistem "e". Karena parameter EventArgs adalah objek, ia mendukung properti dan metode apa pun yang diperlukan. Misalnya, subrutin acara VB6 MouseMove yang lama digunakan untuk menerima empat parameter:

  • Tombol Sebagai Integer
  • Shift As Integer
  • X Sebagai Tunggal
  • Y As Single
instagram viewer

Ketika tikus yang lebih canggih keluar dengan lebih banyak tombol, VB6 memiliki masalah nyata untuk mendukungnya. VB.NET hanya melewati satu parameter MouseEventArgs tetapi mendukung lebih banyak properti dan metode. Dan masing-masing dari mereka adalah objek yang mendukung lebih banyak lagi. Misalnya, e. Properti Button berisi semua properti ini:

  • Kiri
  • Tengah
  • Baik
  • Tidak ada
  • XButton1
  • XButton2

Jika seseorang menemukan mouse "trancendental" dengan tombol "virtual", VB.NET hanya perlu memperbarui .NET Framework untuk mendukungnya dan tidak ada kode sebelumnya yang akan rusak sebagai hasilnya.

Ada sejumlah teknologi .NET yang benar-benar bergantung pada parameter ini. Misalnya, karena PC Anda biasanya hanya memiliki satu layar untuk menampilkan grafik, kode Anda harus menggabungkan gambar yang dibuatnya menjadi gambar yang sama dengan yang digunakan oleh Windows. Untuk alasan itu, satu objek "grafik" harus dibagikan. Cara utama agar kode Anda dapat menggunakan objek "grafik" itu adalah dengan menggunakan parameter e itu diteruskan ke acara OnPaint dengan objek PaintEventArgs.

Subridisi Overrides Terlindungi (

 ByVal e As System. Windows. Formulir. PaintEventArgs)

 Dim g As Graphics = e. Grafik

Contoh lain

Apa lagi yang bisa Anda lakukan dengan parameter ini? Untuk mengilustrasikannya, misalkan Anda ingin menemukan apakah string, mungkin sesuatu yang Anda masukkan ke dalam Textbox, ada di salah satu koleksi Textbox lain ketika Anda mengkliknya. Anda dapat mengkodekan beberapa lusin subrutin yang hampir identik untuk setiap Textbox:

Jika TextBox42.Text. Indeks(

 SearchString. Teks) = -1 

 Kemudian NotFound. Teks = 

 "Tidak ditemukan"

Tetapi jauh lebih mudah untuk membuat kode hanya satu dan membiarkannya menangani semuanya. Parameter pengirim akan mengungkapkan Textbox mana yang diklik.

Private Sub FindIt (

 Pengirim ByVal Sebagai Sistem. Obyek,

 ByVal e As System. EventArgs

 ) Menangani TextBox1.Enter, 

 TextBox2.Enter, 

... dan terus dan terus.. .

 TextBox42.Enter

 Redupkan myTextbox Sebagai TextBox

myTextbox = pengirim

 Dim IndexChar As Integer = 

 myTextbox. Teks. Indeks( 

 SearchString. Teks)

 Jika IndexChar = -1 Lalu _

 Tidak ditemukan. Text = "Not Found" _

 Lain _

 Tidak ditemukan. Text = "Ketemu!"

 End Sub

Baru-baru ini, seorang programmer meminta saya cara yang lebih baik untuk "menghapus baris yang diklik di salah satu dari enam daftar yang ditentukan." Dia membuatnya bekerja dalam beberapa lusin baris kode yang membingungkan saya. Tetapi menggunakan pengirim, itu benar-benar sangat sederhana:

Sub Pribadi ListBox_Click ( 

 Pengirim ByVal Sebagai Objek, 

 ByVal e As System. EventArgs

 ) Menangani ListBox1.Click, ListBox2.Click

 Redupkan myListBox Sebagai ListBox Baru

 myListBox = pengirim

 myListBox. Item. RemoveAt (myListBox. DipilihIndex)

End Sub

Satu lagi contoh untuk memahami maksudnya adalah pertanyaan yang dikirim oleh Pierre di Belgia. Pierre sedang menguji kesetaraan Button1 dan pengirim menggunakan Adalah operator untuk objek:

Jika pengirim adalah Button1 Maka ...

Ini secara sintaksis benar karena pengirim dan Button1 adalah kedua objek yang dapat direferensikan. Dan karena pengirim benar-benar identik dengan Button1, mengapa tidak berfungsi?

Jawabannya tergantung pada kata kunci yang ditemukan sedikit lebih awal dalam pernyataan. Pertama, mari kita periksa dokumentasi Microsoft untuk Adalah operator.

Dasar visual membandingkan dua variabel referensi objek dengan Operator Is. Operator ini menentukan apakah dua variabel referensi merujuk ke instance objek yang sama.

Perhatikan bahwa pengirim telah lulus ByVal. Itu berarti bahwa salinan Button1 dilewatkan, bukan objek yang sebenarnya. Jadi ketika Pierre menguji untuk melihat apakah pengirim dan Button1 adalah contoh yang sama, hasilnya adalah False.

Untuk menguji apakah Button1 atau Button2 telah diklik, Anda harus mengubah pengirim menjadi objek Button yang sebenarnya dan kemudian menguji properti objek itu. Teks biasanya digunakan, tetapi Anda bisa menguji nilai dalam Tag atau bahkan properti Location.

Kode ini berfungsi:

Redupkan Tombol Tombol Sebagai

myButton = pengirim

Jika myButton. Text = "Button1" Lalu

instagram story viewer