UserControl 中的 HandleDestroyed 事件

ste*_*o m 3 c# winforms

我有一个非常简单的自定义 UserControl,名为 MyControl

在我的表单中,我有以下代码(我尝试将其放入 LoadEvent 和构造函数中,在 InitalizeCompoment 之后):

var crl = new MyControl();
Controls.Add(ctrl);
ctrl.HandleDestroyed+=(sender,evt) => { MessageBox.Show("Destroyed") };
Run Code Online (Sandbox Code Playgroud)

但是当我关闭时,表单处理程序永远不会被调用。

Lar*_*ech 5

如果它在主窗体上,那么我认为该事件不会被调用。尝试在事件中处理控件FormClosing以强制调用事件:

void Form1_FormClosing(object sender, FormClosingEventArgs e) {
  crl.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是将FormClosing事件添加到UserControl

void UserControl1_Load(object sender, EventArgs e) {
  this.ParentForm.FormClosing += new FormClosingEventHandler(ParentForm_FormClosing);
}

void ParentForm_FormClosing(object sender, FormClosingEventArgs e) {
  OnHandleDestroyed(new EventArgs());
}
Run Code Online (Sandbox Code Playgroud)

或者在 Lambda 方法中:

void UserControl1_Load(object sender, EventArgs e) {
  this.ParentForm.FormClosing += (s, evt) => { OnHandleDestroyed(new EventArgs()); };
}
Run Code Online (Sandbox Code Playgroud)