2011-07-28 98 views
0

我有一個窗體,並做showdialog。這就像味精盒。我正在做類似窗體在背景

msgBox = new MsgBox(); 
    if (msgBox.InvokeRequired) 
    { 
     msgBox.Invoke(new ShowMsg(ShowMessage)); 
    } 
    else 
    { 
     ShowMessage(); 
    } 

在顯示消息我在做顯示對話框。但形式有時會在主要形式的背景中出現。請幫忙。

+0

到底是什麼ShowMsg?繼承Delegate的類型? –

+1

使用調試器。您會看到InvokeRequired始終是false。更好的是,你應該得到一個異常,告訴你不能在尚未顯示的表單上使用InvokeRequired。 –

回答

0

什麼亂七八糟的在這裏!

是MsgBox從Form類派生的自定義類型?如果是這樣,你可以簡單地調用它的ShowDialog方法來以模態方式顯示它。

如果您不能,請分享ShowMessage方法的內容。

2

您是否在使用線程?

如果你的線程你必須調用父窗體,而不是msgbox本身。

Form frm = new Form(); 
if (parent.InvokeRequired) 
{ 
    parent.Invoke(new ThreadStart(() => 
     { 
      frm.ShowDialog(); 
     })); 
} 
else 
{ 
    frm.ShowDialog(); 
} 

如果你的工作沒有線程只是刪除調用並解釋一下ShowMessage和msgbox做了些什麼。

0

你怎麼稱ShowDialog?您必須將主窗口(或其任何子窗口)傳遞給ShowDialog方法,以便它具有合適的父窗口。

0

不知道你ShowMsg和ShowMessage方法看起來怎麼樣,但嘗試了這一點:

msgBox = new MsgBox(); 
if (msgBox.InvokeRequired) 
{ 
    msgBox.Invoke((MethodInvoker)delegate() { ShowMessage(); }); 
} 
else 
{ 
    ShowMessage(); 
}