在ShowDialog()之后,表单隐藏在另一个表单后面

时间:2014-11-14 15:24:43

标签: c# winforms forms visual-studio messagebox

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

即使我在BringToFront()之前使用ShowDialog()函数,它仍然会回来。 这是此自定义Messagebox的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

1 个答案:

答案 0 :(得分:4)

尝试传递内部消息框类的所有者值

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;
}

使用默认参数,您只能在需要的位置更改代码。

经过一番研究后,我发现this question and its answers解释了这种行为