15

私のwinformsアプリケーションでは、メインウィンドウハンドルを取得しようとしているので、wpfモーダルウィンドウの親として設定できます。私はwinformの経験があまりないので、少しグーグルで調べたところ、2つの方法で入手できました。

  1. System.Windows.Forms.Application.OpenForms[0].Handle
    
  2. System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle
    

(1) は常に正しいと思われる同じ値を返すように見えます (少なくとも私のモーダル ウィンドウは期待どおりに動作します)、(2) は (1) と同じ値を返すこともありますが、まったく異なるポインターを返すこともあります。動作していないようです (私のモーダル ウィンドウは、親ウィンドウだけでなく、他のすべてのウィンドウの上に表示されます)。

誰かが2つの方法の違いを説明できますか? 時々異なる結果を返すのは正常ですか?

編集:

他の誰かが疑問に思っている場合: ハンドルを取得したら、WindowInteropHelperクラスを作成して使用できます。

public static void SetInteropParent(this Window wpfDialogWindow, IntPtr winformsParentHandle)
{
    new WindowInteropHelper(wpdDialogWindow) { Owner = winformsParentHandle }; 
}  
4

1 に答える 1