打开的 MessageBox 正在停用您的子窗体,因此它已关闭。
当打开 MessageBox 而不告诉其父级时,将使用当前活动窗口,在这种情况下是您的子窗体。当 MessageBox 的父(子窗体)关闭时,MessageBox 也会关闭。
如果您希望主窗体打开 MessageBox,即使它是从另一个窗口调用的,请使用使用 IWin32Window owner-Parameter 的重载。
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void button_Click(object sender, EventArgs e) {
var form = new ChildForm(this);
form.Show();
}
// Method called by ChildForm
public void OpenMessageBox() {
IWin32Window owner = this;
MessageBox.Show(owner, "MessageBox opened from MainForm, but called from within ChildForm");
}
}
我发现您的代码存在一个问题。您将控制逻辑从 MainForm 委托给 ChildForm 回到 MainForm。尝试通过使用 ChildForm 的 FormClosed-Event 让 MainForm 控制逻辑流程。请注意,这是一个可选步骤,可以说是一种更简洁的方法来获得您不想实现的行为。
private void button_Click(object sender, EventArgs e) {
var form = new ChildForm(this);
form.FormClosed += ChildFormClosed;
form.Show();
}
private void ChildFormClosed(object sender, FormClosedEventArgs formClosedEventArgs) {
var childForm = (Form)sender;
childForm.FormClosed -= ChildFormClosed;
MessageBox.Show("MessageBox opened from MainForm");
}
}