c# - ShowDialog() 之后窗体隐藏在另一个窗体后面

标签 c# winforms forms visual-studio messagebox

我在应用程序中使用了自定义的 Messagebox,它继承自 Form 类。当我在主窗体上使用它时,它工作得很好。但是,当我在本身从主窗体弹出的窗体上使用其 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

最佳答案

尝试传递内部消息框类的 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;
}

使用默认参数,您可以仅在需要的地方更改代码。

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

关于c# - ShowDialog() 之后窗体隐藏在另一个窗体后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933304/

相关文章:

c# - 为用户调整面板大小

.net - 如何删除标签控件中的填充?

c# - 当 TreeView 失去焦点时,如何保留 KMLTreeView 项目 'selected'?

javascript - 如何从 get 中删除这个 ?url=

c# - wpf(离线)应用程序 c# 的更新问题

c# - 在WebBrowser中隐藏由showModalDialog生成的模态窗口

c# - 将 TreeView 的内容保存到文件并稍后加载

c# - LISP 中的关联列表是否与 C# 中的字典相同?

jQuery 用户界面 : when using multiple buttonsets (radio-buttons) they forget their state

javascript - 使用动态 <select> 的值来显示 &lt;input type="text>