C# 使用C语言检测事件源和事件类型#
我正在学习如何与代表一起工作,现在我已经有了一些想法。在C代码(如下)中,我喜欢用字符串捕获事件类型。获取事件来源和事件类型的最佳方法是什么 对于我正在使用的源名称C# 使用C语言检测事件源和事件类型#,c#,C#,我正在学习如何与代表一起工作,现在我已经有了一些想法。在C代码(如下)中,我喜欢用字符串捕获事件类型。获取事件来源和事件类型的最佳方法是什么 对于我正在使用的源名称sender.GetType().FullName.ToString()如果它是正确的。事件类型如何 谢谢 protected virtual void OnChanged(EventArgs e) { if (Changed != null) Changed(this,e); } protected ove
sender.GetType().FullName.ToString()代码>如果它是正确的。事件类型如何
谢谢
protected virtual void OnChanged(EventArgs e)
{
if (Changed != null)
Changed(this,e);
}
protected override void OnClosed(EventArgs e)
{
base.OnClosed(e);
OnChanged(EventArgs.Empty);
}
public EventListener(myForm theform)
{
TheForm = theform;
TheForm.Changed += new ChangedEventHandler(myMethod);
}
private void myMethod(object sender, EventArgs e)
{
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
您应该能够通过使用找到事件的源。我相信您会发现,事件通常是由具有与事件名称类似的名称的受保护函数触发的。您应该能够通过使用找到事件的源。我相信您会发现,事件通常由具有与事件名称类似的名称的受保护函数触发。无法知道哪个事件使用EventArgs
类调用函数
如果您正在使用准备好的事件(如Click event),您可以创建自己的“Args”类,如下所示:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
然后像这样调用事件:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
在receiver方法中,您可以看到该值,如下所示:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
但是,如果您使用自己的事件,您可以创建自己的委托,并对其执行任何您想要的操作。无法知道哪个事件使用EventArgs
类调用函数
如果您正在使用准备好的事件(如Click event),您可以创建自己的“Args”类,如下所示:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
然后像这样调用事件:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
在receiver方法中,您可以看到该值,如下所示:
public class MyEventArgs : EventArgs
{
public string EventCallerName { get; set; }
}
if (Changed != null)
Changed(this,new MyEventArgs() { EventCallerName = "Changed" });
private void myMethod(object sender, EventArgs e)
{
if (e is MyEventArgs)
MessageBox.Show("Event type: " + (e as MyEventType).EventCallerName);
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
但是,如果您正在使用自己的事件,您可以创建自己的委托,并根据需要使用它。事件的支持类型是委托。无法确定事件处理程序中的事件源。但是,您可以在订阅事件时检查委托类型。定义\发布事件的类将是事件源,委托类型将是事件类型。事件的支持类型是委托。无法确定事件处理程序中的事件源。但是,您可以在订阅事件时检查委托类型。定义\发布事件的类将是事件源,委托类型将是事件类型。这可能是正确的解决方案吗?:
private void Form1_FormClosed(object sender, EventArgs e)
{
var eventType = e.ToString().Split('.').Last().Replace("EventArgs", ""); //eventType = "FromClosed"
}
也许这是正确的解决方案
private void Form1_FormClosed(object sender, EventArgs e)
{
var eventType = e.ToString().Split('.').Last().Replace("EventArgs", ""); //eventType = "FromClosed"
}
假设您想要事件的名称,而不是检测,为什么不在注册事件处理程序时修复它呢?比如:
public EventListener(myForm theform)
{
TheForm = theform;
TheForm.Changed += (s, e) => this.MyMethod(s, e, "Changed");
}
private void MyMethod(object sender, EventArgs e, string eventName)
{
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
假设您想要事件的名称,而不是检测,为什么不在注册事件处理程序时修复它呢?比如:
public EventListener(myForm theform)
{
TheForm = theform;
TheForm.Changed += (s, e) => this.MyMethod(s, e, "Changed");
}
private void MyMethod(object sender, EventArgs e, string eventName)
{
string s = "hey, got notified " + sender.GetType().FullName.ToString();
MessageBox.Show(s);
}
您将“事件类型”称为什么?事件的名称
?很难给你答案,你提供了一点信息,但并不清楚你需要什么…@AdamRobinson是的,这就是我的意思。所以在通知方法中,我需要捕获事件的名称和发送者,或者说事件的发布者。你称之为“事件类型”是什么?事件的名称
?很难给你答案,你提供了一点信息,但并不清楚你需要什么…@AdamRobinson是的,这就是我的意思。所以在通知方法中,我需要捕获事件的名称和发送者,或者说事件的发布者。请注意,由于优化,StackTrace可能没有您期望的所有帧。请注意,由于优化,StackTrace可能没有您期望的所有帧。