如果actions
是一个小组,我可以提出Click
它的父母事件吗?我现在有这段代码,但Click
事件不是方法,所以这段代码无效。
有谁知道我怎么能做到这一点?
actions.Click += delegate(object Sender, EventArgs e)
{
((Panel)Sender).Parent.Click();
}
不可能event
直接从另一个提出 C# class
(即使它是public
)。您可以提供一个方法(具有足够的访问修饰符),event
代表您提出 并在另一个中调用该方法class
。
顺便说一句,这可以通过反射实现,但我认为这是一个肮脏的黑客行为。
CLR 中引发事件的大多数类型都有一个受保护的 On[EventName] 方法,该方法负责引发事件。您可以使用反射“从外部”调用此受保护的方法:
Control parent = ((Control)sender).Parent;
Type parentType = parent.GetType();
MethodInfo onClickMethod = parentType.GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic);
onClickMethod.Invoke(parent, new object[] { e });
我使用反射和扩展方法实现了这一点,因此我可以通过调用(在这种情况下)调用 LinkLabel 点击事件:
var link = new LinkLabel()'
link.Text = "Some link";
link.click();
click() 方法是 C# 扩展方法:
public static void click(this LinkLabel linkLabel)
{
var e = new LinkLabelLinkClickedEventArgs((LinkLabel.Link)(linkLabel.prop("FocusLink")));
linkLabel.invoke("OnLinkClicked", e);
}
它使用另一种扩展方法来:
我能想到的为什么要引发 Click 事件的唯一原因是如果您正在模拟用户输入。您是否正在开发自动测试驱动程序或类似的东西?如果是这样,可能有比使用仅测试辅助方法玷污代码更好的解决方案。 这首先出现在谷歌中,我不知道它是否有任何好处。
如果您试图在应用程序本身中将此作为一种流控制,我会退后一步,看看这是否是正确的做法——它有点“闻起来很糟糕”。