关于ShowDialog的问题

哥本哈根 2012-03-01 10:21:41
在父窗体MDI窗体A中有子窗体a
在这个子窗体a中需要弹出新的窗体b
但是这个b不能显示为模式对话框

也就是 在显示b的时候 不能ShowDialog
但是我怎样才能将这个b显示在最前端呢
不关闭这个窗体就不能操作其他的窗体

下面的方法都不行:

Form_CtnDetail deta = new Form_CtnDetail();
deta.MdiParent = this.MdiParent;
//deta.MdiParent.TopLevel = false;
//deta.TopLevel = true;
deta.TopMost = true;
deta.BringToFront();
deta.Show();
...全文
690 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
三句话

Form_CtnDetail deta = new Form_CtnDetail();
deta.ShowInTaskbar = false;
deta.ShowDialog();

多谢
九章落地 2012-03-01
  • 打赏
  • 举报
回复

Form_CtnDetail deta = new Form_CtnDetail();
deta.ShowInTaskBar=false;
deta.ShowDialog();


直接弹出ShowDialog()弹出窗体deta,并把deta的ShowInTaskBar属性设为False便可,这样就不会在任务栏上显示。
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 ydsunny 的回复:]

deta.MdiParent = this.MdiParent;
不要用这句。

直接弹出ShowDialog()弹出窗体deta,并把deta的ShowInTaskBar属性设为False便可,这样就不会在任务栏上显示。DMI子窗口,是不能阻止操作父窗口的。解决办法就是不让它是MDI子窗口。
[/Quote]

正解
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 kong19 的回复:]

b窗口Close时再把传过来的a窗口的Enabled设置为true
[/Quote]
实验了 不行 理由同上
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kong19 的回复:]

Form_CtnDetail deta = new Form_CtnDetail();
deta.MdiParent = this.MdiParent;
this.MdiParent.Enabled = false;
//this.Enabled = false;
//deta.MdiPare……
[/Quote]
这样一写 整个mdi窗体都不能使用了 包括弹出来的这个b窗体
kong19 2012-03-01
  • 打赏
  • 举报
回复
b窗口Close时再把传过来的a窗口的Enabled设置为true
kong19 2012-03-01
  • 打赏
  • 举报
回复
Form_CtnDetail deta = new Form_CtnDetail();
deta.MdiParent = this.MdiParent;
this.MdiParent.Enabled = false;
//this.Enabled = false;
//deta.MdiParent.TopLevel = false;
//deta.TopLevel = true;
deta.TopMost = true;
deta.BringToFront();
deta.ShowDialog(this);

//this.Enabled = true;
this.MdiParent.Enabled = true;
b窗口load时把传过来的a窗口的Enabled设置为false
九章落地 2012-03-01
  • 打赏
  • 举报
回复
deta.MdiParent = this.MdiParent;
不要用这句。

直接弹出ShowDialog()弹出窗体deta,并把deta的ShowInTaskBar属性设为False便可,这样就不会在任务栏上显示。DMI子窗口,是不能阻止操作父窗口的。解决办法就是不让它是MDI子窗口。
huoyanshan 2012-03-01
  • 打赏
  • 举报
回复
如果不想在任务栏就会显示成两个,把子窗体那个Form的showInTaskbar设为false不就好了嘛。。
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 no4000 的回复:]

那种情况只能是模式窗口
[/Quote]

如果不写 deta.MdiParent = this.MdiParent; 这句话的话
可以实现模式对话 但是那就跳出了mdi父窗体之外了,在任务栏就会显示成两个了
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kong19 的回复:]

应该是b画面操作的时候,可能要查看A或a中的数据,才会有这样的需求吧。
[/Quote]

对 就是这么个需求

哥本哈根 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kong19 的回复:]

你可以在b显示前,把A和a Enable 设置为false.
b Close之后 Enable 改为 true
[/Quote]

实验结果显示


Form_CtnDetail deta = new Form_CtnDetail();
deta.MdiParent = this.MdiParent;
this.MdiParent.Enabled = false;
this.Enabled = false;
//deta.MdiParent.TopLevel = false;
//deta.TopLevel = true;
deta.TopMost = true;
deta.BringToFront();
deta.ShowDialog();

this.Enabled = true;
this.MdiParent.Enabled = true;
//未启用的窗体不能显示为模式对话框。在调用 showDialog 之前应将窗体的 Enabled 属性设置为 true。
No4000 2012-03-01
  • 打赏
  • 举报
回复
那种情况只能是模式窗口
kong19 2012-03-01
  • 打赏
  • 举报
回复
应该是b画面操作的时候,可能要查看A或a中的数据,才会有这样的需求吧。
gomoku 2012-03-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hello_wys 的回复:]
//用ShowDialog报错
//非顶级窗体不能显示为模式对话框。在调用 showDialog 之前应从所有父窗体中移除该窗体。
[/Quote]
那就把下面一行去掉:)
deta.MdiParent = this.MdiParent;
kong19 2012-03-01
  • 打赏
  • 举报
回复
你可以在b显示前,把A和a Enable 设置为false.
b Close之后 Enable 改为 true
哥本哈根 2012-03-01
  • 打赏
  • 举报
回复

//用ShowDialog报错
//非顶级窗体不能显示为模式对话框。在调用 showDialog 之前应从所有父窗体中移除该窗体。
九章落地 2012-03-01
  • 打赏
  • 举报
回复
有一点不明白,既要显示在最前端,却不能用ShowDialog()打开?
huoyanshan 2012-03-01
  • 打赏
  • 举报
回复
为啥不能showdialog呢。。你需要实现的就是showdialog阿。。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧