如果actions
是专家组,我可以举起它的父母的Click
事件吗?
我目前有此代码,但Click
事件不是方法,因此此代码无效
有谁知道我怎么能做到这一点?
actions.Click += delegate(object Sender, EventArgs e)
{
((Panel)Sender).Parent.Click();
}
答案 0 :(得分:9)
无法直接从另一个event
提升C#class
(即使它是public
)。您可以提供一种方法(具有足够的访问修饰符),代表您提出event
并在另一个class
中调用该方法。
顺便说一句,这可以通过反思实现,但我认为这是一个肮脏的黑客。
答案 1 :(得分:6)
CLR中引发事件的大多数类型都有一个受保护的On [EventName]方法,它负责引发事件。您可以使用Reflection:
“从外部”调用此受保护的方法 Control parent = ((Control)sender).Parent;
Type parentType = parent.GetType();
MethodInfo onClickMethod = parentType.GetMethod("OnClick", BindingFlags.Instance | BindingFlags.NonPublic);
onClickMethod.Invoke(parent, new object[] { e });
答案 2 :(得分:2)
我使用反射和扩展方法实现了这个,这样我就可以通过调用来调用(在本例中)一个LinkLabel click事件:
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);
}
使用另一种扩展方法:
答案 3 :(得分:1)
答案 4 :(得分:1)
我能想到你想要提升Click事件的唯一原因是你是在模拟用户输入。您是在使用自动测试驱动程序还是其他类似的东西?如果是这样,可能有更好的解决方案,而不是使用仅测试辅助方法来玷污代码。 This首先出现在谷歌中,我不知道它是否有用。
如果您尝试将此作为应用程序本身的一种流控制,我会退后一步,看看这是否是正确的做法 - 它有点“闻起来很糟糕”。