如何检测对另一个窗体的方法的调用
本文关键字:窗体 另一个 方法 调用 何检测 检测 | 更新日期: 2023-09-27 18:21:48
我有一个名为myForm
的winform应用程序。在这个表单中,我打开另一个表单:
private OtherForm otherForm; //this is a field
private OpenOtherForm()
{
if (otherForm == null)
{
otherForm = new OtherForm();
otherForm.FormClosing += delegate { MessageBox.Show("OtherForm will be closed"); otherForm = null};
}
MessageBox.Show("Form is already active!");
}
这很好用。但我也有一些第二种形式的方法。我想试着捕捉他们的电话。
例如,如果在第二个表单中调用OtherForm.DoSomething(),我希望有一个消息框来显示thi。
我试图分配OtherForm.DoSomething() += delegate { /* mesagebox */};
,但这并不能编译
otherForm.FormClosing += delegate { .. }
正在编译,因为FormClosing的类型为Event。可以订阅一个事件,当它被激发时,您的代码将运行。
不能在像DoSomething()
这样的方法上使用此语法。方法只能用类似otherForm.DoSomething()
的方法调用。然后将执行DoSomething()
中的代码。
但是,您可以创建自己的事件,并在以第二种形式执行DoSomething()时激发它
这是关于发布您自己的活动的MSDN文档。
它可能类似于:
public event EventHandler RaiseCustomEvent;
public void DoSomething()
{
OnRaiseCustomEvent();
}
protected virtual void OnRaiseCustomEvent()
{
EventHandler handler = RaiseCustomEvent;
if (handler != null)
{
handler(this, EventArgs.Empty););
}
}
如果您想在另一个表单中响应调用,可以将事件添加到另一个窗体中,并在您试图响应的方法中引发它。
class Form1: Form
{
public void Button1_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.SomeMethodCalled += Form2_SomeMethodCalled;
}
public void Form2_SomeMethodCalled(object sender, EventArgs e)
{
// method in form2 called
}
}
class Form2 : Form
{
public event EventHandler SomeMethodCalled;
public void SomeMethod()
{
OnSomeMethodCalled();
// .....
}
private void OnSomeMethodCalled()
{
var s = SomeMethodCalled;
if(s != null)
{
s(this, EventArgs.Empty);
}
}
}