2014-11-14 93 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

相關問題