如果一个方法处理许多事件,处理程序是否有办法告诉它正在响应哪个事件?



这是出于调试目的。而且我无法使用Visual Studio进行调试,因为我正在其他设备上进行测试。

现在,我能做的最好的事情就是查看将哪些特定的EventArgs派生类传递给处理程序。有没有办法更具体地了解这一点,并查看在处理它的方法中调用了什么确切的事件?

ContentControl cc = my_button;
cc.DragEnter += LogEvent;
cc.DragLeave += LogEvent;
cc.GotFocus += LogEvent;
cc.GotMouseCapture += LogEvent;
cc.GotStylusCapture += LogEvent;
...
private void LogEvent(object sender, EventArgs e)
{
    ContentControl cc = (ContentControl)sender;
    my_textBlock.Inlines.Add(cc.Name + " " + e.ToString() + Environment.NewLine);
}

我想我可以用更笼统的术语来提出这个问题,并问:一种方法可以判断哪个委托正在调用它吗?

你可以试试这个:

cc.DragEnter += (sender,e) => LogEvent("DragEnter",sender);
cc.DragLeave += (sender,e) => LogEvent("DragLeave",sender);
cc.GotFocus += (sender,e) => LogEvent("GotFocus",sender);
cc.GotMouseCapture += (sender,e) => LogEvent("GotMouseCapture",sender);
cc.GotStylusCapture += (sender,e) => LogEvent("GotStylusCapture",sender);
private void LogEvent(string eventName,object sender) {
    ContentControl cc = (ContentControl)sender;
    my_textBlock.Inlines.Add(cc.Name + " " + eventName);
}

您应该能够将其从调用堆栈中提取出来。 看看Enviroment.StackTraceSystem.Diagnostics.StackTrace

相关内容

  • 没有找到相关文章

最新更新