显示 MessageBox 时如何防止 Form 最大化?

How to prevent the maximizing of a Form when a MessageBox is shown?

情况

我有一个表格

MyMainForm.Show()

它有一个未显示模态的子表单

// Not modal, owner is MyMainForm
SubForm.Show(MyMainForm);

用户 minimizes SubForm 并与 MyMainForm 交互,然后显示一个 MessageBox。

// SubForm is still opened, but minimized

// Owner is MyMainForm (same like the opened SubForm)
MessageBox.Show(MyMainForm, "Any message", ...);

问题

用户没有点击 MessageBox,而是 maximizes SubForm。

由于 MessageBox 仍处于打开状态(具有相同的所有者!),SubForm 不接受任何输入并且应用程序似乎冻结

问题

当显示具有相同所有者的 MessageBox 时,如何防止 SubForm 最大化?

(无法将 MessageBox 绑定到 SubForm)

什么不起作用

我试图通过收听 Windows 消息来识别最大化。但是当显示 MessageBox 时,没有发送 Windows 消息!

public partial class SubForm : Form
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == WM_SYSCOMMAND)
        {
            // Works well, except when the MessageBox is shown
            // then no appropriate message is sent
            
            ...
        }
    }
}

如果我没有正确理解你的问题,那么我会尝试以这种方式处理 SubForm 上的 Resize 事件

void onResize(object sender, EventArgs e)
{
    if(!this.CanFocus)
        this.WindowState = FormWindowState.Normal;
}

当从所有者窗体显示模态消息框时,这种方法似乎可以处理子窗体的重新激活。当然,确切的可用性取决于子表单的默认大小有多大。它仍然可以覆盖 MessageBox 位置。但是您仍然可以在同一个 onResize 事件处理程序中处理修改子表单的 Location 和 Size 属性,或者尝试使用 Jimi

下面的评论中解释的解决方法