2014-11-14 64 views
0

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

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

您可以通过所有者的形式ShowDialog的 – Ahmad 2014-11-14 15:26:51

回答

3

尝试通过用户价值为你的内部消息框类

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解释了一下这种行为

+0

我已经说过它的OP :(! – Ahmad 2014-11-14 15:28:12

+0

@Steve OMG!这意味着我有在我的应用程序中改变函数的每一个用法,并添加一个'owner'参数?有没有办法在不改变方法签名的情况下做同样的改变?实际上有5个不同版本的Show()方法所以请将变化乘以5. – Disasterkid 2014-11-14 15:45:15

+0

我不确切地知道您的上下文,您可以尝试使用默认参数并只在需要时更改。更新答案 – Steve 2014-11-14 15:55:54

相关问题