我成功通过以下方法在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文件(Build solution,你知道)。首先,当我使用断点进行调试时,代码工作正常,但是当我尝试运行它时,App2将作为不同的进程打开,但不会在App1中打开。其次,我无法打开我在App2中添加的表单,该表单以MDI子表单(app2)打开。
Form1 frm = new Form1();
frm.MdiParent = Application.OpenForms[0];
frm.Show();
这就是我在MDI表单中打开子表单的方式。
答案 0 :(得分: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);