原因是在线程中创建的form2,不知道它父窗口是谁。
将form2.ShowDialog()中指定它父窗口就可以了,form2.ShowDialog(this)。
private void StartProcess1()
{
Form2 form2 = new Form2();
if (form2.ShowDialog(this) != DialogResult.OK)
{
ShowDlg();
}
}
表示不解。子窗口弹出前,难道父窗口不是出于激活状态吗?
子窗口的StartPosintion属性应该设置 CenterParent
C#在父窗口中调用子窗口的过程:
1、 创建子窗口对象
2、 显示子窗口对象
主窗体MainFrm通过菜单调用子窗口ChildFrm。在窗体中定义了子窗口对象,然后在菜单项点击事件中,加入了如下代码来创建和显示子窗口:
Private childFrm myChildFrm = null; //定义子窗口对象
private void OpenChildFrmToolStripMenuItem_Click(object sender, EventArgs e)
{
myChildFrm = new ChildFrm();//创建子窗口对象
myChildFrm.Show();//显示子窗口
myChildFrm.Focus();//使子窗口获得焦点
}
当点击菜单中的OpenChild项时,创建了子窗口并显示在最前面。此时如果关闭子窗口再点击菜单打开,不会有问题。但是如果子窗口没有关闭的情况下,再次点击菜单中的OpenChild项,则会再创建一个子窗口。
你子窗口是从新线程弹出来的,它无法直接访问父窗口,所以无效