我在处理事件被提升为封闭形式并希望得到一些帮助的场景时遇到了问题。如何避免将事件提升为封闭形式?
方案(请参阅下面的代码以供参考):
Form1
打开Form2
Form1
订阅了一个事件上Form2
(姑且称之为事件FormAction
)Form1
被关闭,Form2
遗体打开Form2
引发FormAction
事件
在Form1.form2_FormAction
,为什么this
返回Form1
但button1.Parent
回报null
参考?他们不应该都返回相同的参考?
如果我们要省略步骤3,则this
和button1.Parent
都会返回相同的参考。
下面是我使用的代码...
Form1中:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click (object sender , EventArgs e)
{
// Create instance of Form2 and subscribe to the FormAction event
var form2 = new Form2();
form2.FormAction += form2_FormAction;
form2.Show();
}
private void form2_FormAction (object o)
{
// Always returns reference to Form1
var form = this;
// If Form1 is open, button1.Parent is equal to form/this
// If Form1 is closed, button1.Parent is null
var parent = button1.Parent;
}
}
窗体2:
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public delegate void FormActionHandler (object o);
public event FormActionHandler FormAction = delegate { };
private void button1_Click (object sender , EventArgs e)
{
FormAction("Button clicked.");
}
}
理想情况下,我想,以避免引发事件关闭/处置形式(我不知道是可能的)还是找到一个干净的方式来处理调用者(在这种情况下,Form1
)。
任何帮助表示赞赏。
该应用程序的设计允许子窗体在父窗体关闭后保持打开状态。不幸的是,我无法改变设计。 – 2010-04-20 14:33:09