一行鑑於多種方法:訂閱的代碼
btn1.MouseDown += someMethod1;
btn1.MouseDown += someMethod2;
btn1.MouseDown += someMethod3;
我如何定義一個適當的結構允許這樣的:
btn1.MouseDown += someMethods;
一行鑑於多種方法:訂閱的代碼
btn1.MouseDown += someMethod1;
btn1.MouseDown += someMethod2;
btn1.MouseDown += someMethod3;
我如何定義一個適當的結構允許這樣的:
btn1.MouseDown += someMethods;
您可以使用Delegate.Combine
創建一個委託。像這樣的東西(可能有不同的委託類型):
EventHandler handler = (EventHandler)Delegate.Combine((EventHandler)someMethod1,
(EventHandler)someMethod2,
(EventHandler)someMethod3);
SomeEvent += handler;
通常做的將是一回事,有集合方法,並超過他們迭代:
foreach (var f in new EventHandler[]{someMethod1, someMethod2, someMethod3})
{
btn1.MouseDown += f;
}
這也可以變成使用List.ForAll()
如果你想有一個單行使用它而不是foreach
。
這可能只是做一個平凡的方式,但你可以這樣做:
EventHandler someMethods = someMethod1;
someMethods += someMethod2;
someMethods += someMethod3;
btn1.MouseDown += someMethods;
您可以使用delegate.combine或只是使用'+'運算符鏈接多個代表。
btn1.MouseDown = new EventHandler(Method1) + new EventHandler(Method2) + new EventHandler(Method3) + ...;
兩者基本相同。
巧妙的把戲。看起來好像你只是將第一個投入爲EventHandler,其餘的將自動投射:'btn1.MouseDown + =(EventHandler)someMethod1 + someMethod2 + someMethod3;' – StriplingWarrior
工作完美。謝謝。 – NWoodsman