我有一个表格(父母)。我也从另一个进程处理Form(子)。我需要始终在父级顶部显示子表单,并且可以使用主表单。
当我们打电话时它起作用:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void MainForm_Shown(object sender, EventArgs e)
{
var childForm = new Form();
childForm.Show(this);
}
}
此外,如果主窗体关闭,则来自其他进程的子窗体将继续工作。
我尝试使用pinvoke SetParent()函数,但它将子窗体设置为MDI。
答案 0 :(得分:4)
调用SetWindowLongPtr
传递GWL_HWNDPARENT
作为索引。
SetWindowLongPtr(OwnedWnd, GWL_HWNDPARENT, OwnerWnd);
您可能需要在z顺序中手动将拥有的窗口置于所有者窗口的前面,因为只需调用上述函数就不会发生这种情况。