【问题标题】:Form hides behind the other form after ShowDialog()ShowDialog() 之后表单隐藏在另一个表单后面
【发布时间】:2015-01-12 00:57:38
【问题描述】:

我在我的应用程序中使用了自定义的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

【问题讨论】:

  • 您可以将所有者表单传递给 showdialog

标签: c# winforms forms visual-studio messagebox


【解决方案1】:

尝试为您的内部消息框类传递 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 可以解释这种行为

【讨论】:

  • 我不完全了解您的上下文,您可以尝试使用默认参数并仅在需要的地方进行更改。更新答案
猜你喜欢
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2010-12-10
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多