0
在爲doubleclick執行特定代碼之後,我試圖調用一組列表框的click方法。在ListBox的DoubleClick方法中調用Click方法
Private Sub ListBox1_Click(sender As Object, e As System.EventArgs) Handles ListBox1.Click
' Do something 1
End Sub
Private Sub ListBox2_Click(sender As Object, e As System.EventArgs) Handles ListBox2.Click
' Do something 2
End Sub
Private Sub ListBoxes_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick,
ListBox2.DoubleClick
' Do something for doubleclick
' Invoke Click method
Try
Dim result As Object = Me.GetType().InvokeMember(sender.name + "_Click",
BindingFlags.Default Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.InvokeMethod,
Nothing, Nothing, New Object() {sender, Nothing})
Catch ex As Exception
End Try
End Sub
結果是「MissingMethodException」異常
Method MyProject1.Form1.ListBox1_Click not found
但它的存在,看VB,它只是存在,在頂部,你看不出來?
謝謝你的幫助。
同意你的答案,是我的第一個想法。 但事情是,我已經像應用程序中的50列表框(隨着時間的推移而增加),並不想實現一個巨大的開關或如果像 「 如果DirectCast(發件人,列表框).name = ListBox1 .NAME然後 DoSomething1() ELSEIF DirectCast(發件人,列表框)。名稱= ListBox2.name然後 了doSomething2() 結束如果 「 然而,我可以在一個定義的格式的名字我的所有DoSomething的,並且盡反射法無論如何,我會讓你知道,如果這有效。 – Skippy
我同意這一點。如果你有很多控制,這是矯枉過正的。讓我張貼! – Natrium
好吧,花了我很長時間來修改我的每個列表框單擊處理程序。 (2)在你的建議中調用這個函數,如你的建議 (2)在事件函數中調用這個函數,如你的建議 (1)移動每個listbox1_Click,listbox2_Click,...的代碼在一個名爲listbox1Process,listbox2Process,... (2) 3)使用InvokeMember反饋(sender.name +「Process」 ,它的工作原理(我現在差不多已經死了) – Skippy