0

通过使用以下方法,我成功地在 MDI 父窗体中打开了 MDI 父窗体:我制作了两个桌面应用程序(即 App1 和 App2),以 MDI 父窗体作为启动。在 App1 中,我在 MDI 父级上添加了一个面板,我们将在其中打开另一个应用程序,即 App2。现在我在 App1 中添加了这段代码。

using System.Diagnostics;
using System.Runtime.InteropServices;

[DllImport("user32.dll")]
    static extern IntPtr SetParent(IntPtr hwndChild, IntPtr hwndNewParent);
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, Int32 wParam, Int32 lParam);

现在在按钮单击事件中使用以下代码。(App1)

    // Create a new process
        Process proc;

        // Start the process
        proc = Process.Start(Application.StartupPath + @"\App2.exe");
        ////proc = Process.Start("notepad.exe");
        proc.WaitForInputIdle();

        // Set the panel control as the application's parent
        SetParent(proc.MainWindowHandle, this.panel1.Handle);

        // Maximize application
        SendMessage(proc.MainWindowHandle, 274, 61488, 0);
        MessageBox.Show(Application.OpenForms[0].ToString());

在这里,Application.StartupPath + @"\App2.exe" 是我构建的进程或 EXE 文件(构建解决方案,你知道的)。首先,当我使用断点进行调试时,代码工作正常,但是当我尝试运行它时,App2 作为不同的进程打开,但在 App1 中没有。其次,我无法打开我在 App2 中添加的表单,该表单作为 MDI 子表单(app2)打开。

  Form1 frm = new Form1();
        frm.MdiParent = Application.OpenForms[0];
        frm.Show();

这就是我在 MDI 表单中打开子表单的方式。

4

1 回答 1

0
// Create a new process
Process proc;

// Start the process
proc = Process.Start(Application.StartupPath + @"\App2.exe");
proc.WaitForInputIdle();

// Add this by using using System.Threading;
Thread.Sleep(500);

// Set the panel control as the application's parent
SetParent(proc.MainWindowHandle, this.panel1.Handle);
于 2014-06-14T20:06:04.737 回答