窗体隐藏在 ShowDialog() 之后的另一个窗体后面

本文关键字:窗体 另一个 之后 隐藏 ShowDialog | 更新日期: 2023-09-27 18:30:21

我在应用程序中使用了从Form类继承的自定义Messagebox。当我在主窗体上使用它时,它工作正常。但是当我在本身从主窗体弹出的窗体上使用其Show()函数时,Messagebox隐藏在第二个窗体下,因此程序变得不可用。

即使我在ShowDialog()之前使用它的BringToFront()功能,它仍然会返回。这是此自定义消息框的Show()功能。如有必要,我可以分享更多代码:

public static DialogResult Show(string message, string title)
{
    _msgBox = new MsgBox();
    _msgBox._lblMessage.Text = message;
    _msgBox._lblTitle.Text = title;
    _msgBox.Size = MsgBox.MessageSize(message);
    MsgBox.InitButtons(Buttons.OK);
    //_msgBox.BringToFront();
    _msgBox.ShowDialog();
    return _buttonResult;
}

MsgBox是类本身的名称:

class MsgBox : Form

窗体隐藏在 ShowDialog() 之后的另一个窗体后面

尝试传递内部消息框类的 Owner 值

public static DialogResult Show(string message, string title, Form owner = null)
{
    _msgBox = new MsgBox();
    _msgBox._lblMessage.Text = message;
    _msgBox._lblTitle.Text = title;
    _msgBox.Size = MsgBox.MessageSize(message);
    MsgBox.InitButtons(Buttons.OK);
    if(owner != null)
        _msgBox.ShowDialog(owner);
    else
        _msgBox.ShowDialog();
    return _buttonResult;
}

使用默认参数,您可以只在需要时更改代码。

经过一番研究,我发现了这个问题及其答案,可以解释这种行为