Pokud jsem Vás dobře pochopil, tak máte na mysli něco takového:
Public Class Form3
Private Sub procedura1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' původní kód, který "nesmíte" měnit
MsgBox("z procedury 1")
End Sub
Private Sub procedura2(ByVal sender As System.Object, ByVal e As System.EventArgs)
' váš nový kód
MsgBox("z procedury 2")
End Sub
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler Button1.Click, AddressOf procedura2
End Sub
End Class
Vy takto události click tlačítka button přidáváte další handler na další obslužnou metodu. Nevím, nakolik je to korektní postup - to musí říci odborníci, ale pokud vycházím z toho, co zde kdysi psal pan Linhart o příbuzném jazyku C#, kde se handlery přidávají pomocí operace += soudím, že jich k události může být legálně navěšeno více. Pouze nevím, nakolik je striktně dáno pořadí jejich provádění, ale pokud jsem to zkoušel, tak se mi to chovalo přesně naopak, než Vy popisujete - nejprve se provedla obslužná metoda "Procedura1", poté teprve ta programově přidaná "Procedura2". Pokud máte skutečně nějaký vážný důvod, proč to nesloučit do jedné metody, pak by bylo nejlépe (nesmíte-li vůbec zasahovat do původně vygenerované ("procedura1" - původně "Button1_Click"), pak by bylo nejlepší to, co Vám radil pan Linhart - u procedury1 zrušte vše, co se nachází za závorkou (Handles Button1.Click), vyrobte si svou proceduru a z ní, pokud uznáte, že je to nutné, proceduru Procedura1 volejte. Nějak takto:
Public Class Form3
Private Sub procedura1(ByVal sender As System.Object, ByVal e As System.EventArgs)
' původní kód, který "nesmíte" měnit
MsgBox("z procedury 1")
End Sub
Private Sub procedura2(ByVal sender As System.Object, ByVal e As System.EventArgs)
' váš nový kód
If MsgBox("Provést i proceduru1?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then procedura1(sender, e)
End Sub
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler Button1.Click, AddressOf procedura2
End Sub
End Class
No a pokud ani takový zásah nesmíte udělat (odstranit handles), pak to jde ještě obejít tím, že tento "Handler" odstraníte programově:
Public Class Form3
Private Sub procedura1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' původní kód, který "nesmíte" měnit
MsgBox("z procedury 1")
End Sub
Private Sub procedura2(ByVal sender As System.Object, ByVal e As System.EventArgs)
' váš nový kód
If MsgBox("Provést i proceduru1?", MsgBoxStyle.OkCancel) = MsgBoxResult.Ok Then procedura1(sender, e)
End Sub
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RemoveHandler Button1.Click, AddressOf procedura1
AddHandler Button1.Click, AddressOf procedura2
End Sub
End Class
|