2016-07-23 8 views
0

私のアプリケーションでは、ユーザーがフォームを開くためにラベルをクリックするとフォームがbackground.Iで表示されますが、これは前面に来るのではなく、むしろタスクバーに置かれていることを意味します。ユーザーがフォームのインスタンスをキャンセルしてラベルを再度クリックすると、フォームがフォアグラウンドで開きます。コードの一部が特定の作業を行います。WindowsフォームをC#で前面に表示するにはどうすればよいですか?

 if (DataFormDlg.Instance.InvokeRequired) 
     { 
      DataFormDlg.Instance.BeginInvoke(
       new ShowDataFormDelegate(ShowDataForm), pageId, timeout); 
      return; 
     } 

     DataFormDlg.Instance.CurrentPageId = pageId; 
     DataFormDlg.Instance.Timeout = timeout; 

     if (!DataFormDlg.Instance.Visible) 
      DataFormDlg.Instance.ShowDialog(); 
     else 
      DataFormDlg.Instance.Focus(); 

ここで、DataFormDlgはWindowsフォームから派生しています。

+0

あなたがDataFormDlg、インスタンスを試してみました[BringToFront関数()](https://msdn.microsoft.com/en-us/library/system.windows。 .forms.control.bringtofront%28v = vs.110%29.aspx?f = 255&MSPPError = -2147217396); – Steve

+0

はい..これを試みました.. –

+0

明示的にフォームのParentプロパティを設定しようとしましたか? –

答えて

1

現在のフォームを所有者としてShowDialogメソッドに渡します。ユーザーが最初のフォームをクリックしても、ダイアログフォームは最初のフォームの後ろには決して戻ることはありません。

もう1つの結果は、所有者フォームが閉じると2番目のフォームが自動的に閉じられることです。これは、ShowDialogではなく、Showで2番目のフォームを開いたときに特に便利です。このオーバーロードされたバージョン使用

DataFormDlg.Instance.ShowDialog(this); 

public DialogResult ShowDialog(IWin32Window owner) 
関連する問題