2011-04-18 76 views
0

我想使用下面的snippit。使用各種控件的事件

For Each x As Control In Me.Controls 
     If TypeOf x Is CustomControl Then 
      SomeAction(x.CustomEventofCustomControl) 
     End If 
    Next 

這裏的問題是,並非所有的控件都有事件CustomEventofCustomControl,所以編譯器尖叫。我如何解決這個問題。

ps:有更好的標題的任何想法?

回答

1

一個好主意就是使用像IHasWhateverEvent這樣的標記接口(當然,告訴我哪一個和我會寫一個更好的名字!)。該界面沒有成員,因爲它是一個標記。

你讓任何具有事件實現這個空白界面定製控件,那麼你這樣做:

For Each x As Control In Me.Controls 
     If x Is IHasWhateverEvent Then 
      SomeAction(((IHasWhateverEvent)x).CustomEventofCustomControl) 
     End If 
Next 

或者如果可以的話,就在你的界面添加了一個事件,所以當你施放一些控制IHasWhateverEvent,你將可以訪問事件本身。

+0

您可能需要將事件添加到該接口並做SomeAction(CTYPE(X,IHasWhateverEvent).CustomEventofCustomControl),我覺得編譯器仍然會告訴你, CustomEventofCustomControl不是Control的成員 – Kratz 2011-04-18 21:18:37

+0

這就是我所暗示的:D順便說一句,你對第二種說法是正確的:我忘了演員。我更新了示例代碼。 – 2011-04-19 07:31:05

+0

我真的不明白你的答案。你可能是對的,我不知道。無論如何,提及鑄造讓我走上了正軌。謝謝! – 2011-04-19 14:15:37

0

什麼解決了我的問題:

For Each x As Control In Me.Controls 
     If TypeOf x Is CustomControl Then 
      SomeAction(CType(x, CustomControl).CustomEventofCustomControl) 
     End If 
    Next