WithEvents ve Handles yan tümcesi, kodumuzu yazarken nesne değişkenini ve olay işleyicisini bildirmemizi gerektirir, bu nedenle derleme üzerine bağlantı oluşturulur. Öte yandan, AddHandler ve RemoveHandler ile bağlantı çalışma zamanında oluşturulur ve kaldırılır, bu da daha esnek olur.
Birkaç MDI alt formu yüklemek istediğimizi varsayalım, bunların her birinin yalnızca bir kez yüklenmesine ve elbette alt formlardan birinin ne zaman kapandığını bilmesine izin verelim. Yüklenecek birkaç formumuz olduğundan, esnek olabilmemiz ve yapabileceğimiz minimum kodu yazabilmemiz için AddHandler ve RemoveHandler anahtar kelimelerini kullanmak istiyoruz.
Hadi kirlenelim.
1. Her bir MDI alt formunda genel bir olay ilan etmeliyiz.
Halka Açık Etkinlik Formu Kapalı (ByVal f As Form)
2. Her MDI alt formunda, MyBase.Closed sınıfını işleyen ve FormClosed olayını oluşturan Form_Closed yöntemini kullanmalıyız.
Özel Alt Form1_Closed (ByVal gönderen Nesne, ByVal e As System.EventArgs) _
MyBase.Closed ile çalışır
RaiseEvent FormClosed (Me)
Sub
3. MDI formumuzda iki üye değişkeni belirtmemiz gerekiyor. Form türündeki ilkler ve ikincisinin türü ArrayList’dir.
Form olarak özel m_f (0)
Özel m_sLoadedChildForms As New ArrayList
4. Yüklenen MDI alt formlarını arayacak bir yöntem uygulamalıyız. MDI alt formlarını kaldırdığımızda da bu yöntemi kullanacağız.
Özel Fonksiyon SearchChildForm (ByVal strSearchForm As String, _Optional ByVal idxEventHandler As Long = -1) As Long
Dim i As Long = 0
İ = 0 için m_sLoadedForms.Count – 1 için
M_sLoadedForms.Item (i) = strSearchForm ise
Dim j As Long = 0
J = m_f.GetLowerBound (0) için m_f.GetUpperBound (0) ‘a
Eğer m_f (j) .Name = strSearchForm Sonra idxEventHandler = j
Sonraki j
Dönüş i
Bitiş Eğer
Sonraki
Dönüş -1
Son İşlevi
5. mdi alt formlarını yüklemek için bir yöntem uygulamalıyız ve aynı mdi alt formunu ikinci kez yüklememek için SearchChildForm yöntemini kullanmalıyız.
Özel Alt LoadChildForms (ByVal f As Form)
Eğer m_f.GetUpperBound (0)> 0 ise
ReDim Koruma m_f (m_f.GetUpperBound (0) + 1)
Bitiş Eğer
m_f (m_f.GetUpperBound (0)) = f I
f SearchChildForm değil (m_f (m_f.GetUpperBound (0)). Name ())> = 0 Sonra
m_f (m_f.GetUpperBound (0)). MdiParent = Ben
AddHandler m_f (m_f.GetUpperBound (0)). Kapalı, _
AddressOf UnloadChildForm
m_f (m_f.GetUpperBound (0)). Göster ()
m_sLoadedChildForms.Add (m_f (m_f.GetUpperBound (0)). Ad)
Başka
Eğer m_f.GetUpperBound (0)> 0 ise
ReDim Preserve m_f (m_f.GetUpperBound (0) – 1)
Bitiş Eğer
Bitiş Eğer
Sub
6. Sonunda mdi child formumuzu dizi listesinden çıkarmak için bir yöntem uygulamalıyız, böylece istersek tekrar yükleyebiliriz.
Özel Alt UnloadForm (ByVal gönderen As System.Object, ByVal e As System.EventArgs)
Dim i As Long
Dim s As String = gönderen.GetType (). İsim
Dim IndexForEventHandler = -1
i = SearchChildForm (s, IndexForEventHandler)
İ> = 0 ise m_sLoadedForms.RemoveAt (i)
IndexForEventHandler> = 0 ise
RemoveHandler m_f (IndexForEventHandler) .Closed, AddressOf UnloadForm
m_f (IndexForEventHandler) = Hiçbir şey
Bitiş Eğer
Sub
GIPHY App Key not set. Please check settings