c#线程中弹出窗口,子窗口无法显示在父窗口中央。

子窗口的StartPosintion属性已经设置为ParentCenter了,但是当主窗口处于非激活状态时,弹出的子窗口总是跑到屏幕中央而不是父窗口中央。代码如下:pri... 子窗口的StartPosintion属性已经设置为ParentCenter了,但是当主窗口处于非激活状态时,弹出的子窗口总是跑到屏幕中央而不是父窗口中央。
代码如下:
private void button2_Click(object sender, EventArgs e)
{
ShowDlg();
}
private void ShowDlg()
{
thread = new Thread(new ThreadStart(StartProcess));
thread.Start();
}
private void StartProcess()
{
Thread.Sleep(3000);
Invoke(new DStartProcess1(StartProcess1));
}
delegate void DStartProcess1();
private void StartProcess1()
{
Form2 form2 = new Form2();
if (form2.ShowDialog() != DialogResult.OK)
{
ShowDlg();
}
}
展开
 我来答
凰舞玖天
2012-08-09
知道答主
回答量:1
采纳率:0%
帮助的人:2.7万
展开全部
原因是在线程中创建的form2,不知道它父窗口是谁。
将form2.ShowDialog()中指定它父窗口就可以了,form2.ShowDialog(this)。
private void StartProcess1()
{
Form2 form2 = new Form2();
if (form2.ShowDialog(this) != DialogResult.OK)
{
ShowDlg();
}
}
涛褪荒芜
2012-08-05 · 超过31用户采纳过TA的回答
知道答主
回答量:107
采纳率:0%
帮助的人:79.7万
展开全部
表示不解。子窗口弹出前,难道父窗口不是出于激活状态吗?

子窗口的StartPosintion属性应该设置 CenterParent
追问
程序运行起来后,再激活其他程序。这个程序就不是激活状态了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96ffcf7
推荐于2016-11-09 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22721 获赞数:118716
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
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项,则会再创建一个子窗口。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Jarhf
2012-08-05 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1013万
展开全部
你子窗口是从新线程弹出来的,它无法直接访问父窗口,所以无效
追问
如果程序处于激活状态,子窗口会在父窗口中央。非激活就不会显示在父窗口中央了,什么道理?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式