Code Bye

怪异的ShowDialog

Form2中
( new Form1() ).ShowDialog( this );

Form1中

IntPtr ip = GetParent( this.Handle );
MessageBox.Show( ip.ToString( "x" )+","+this.Owner.Handle.ToString("x") );

可以看到Form1的弹出框竟然返回0,1b0aee,为什么owner有值,而GetParent没有值呢?而且最后测试发现只有messagebox能GetParent获取,ShowDialog的都不能,另外一个怪异的地方,ShowDialog的窗体用SPY++观察没有WS_POPUP样式,这是什么弹出框?

解决方案

20

onwer != parent
至于你说的第二个 不知道
假如有 popup 属性的话 那么窗体的样式会和右键菜单的效果一样 会有右边和下边的黑色阴影效果
windows style 是控制窗体样式的
模态对话框 貌似 不是受到windows style控制的 而是系统自身本身的一个行为
假如说 通过windows style能控制模态对话框 那么 本人本人用 setwindowslong 设置一下窗体的样式 让他有 模态对话框的style
那么问题来了 这个窗体是 相对于谁模态?。他的owner 是谁?。
你上面 不用 showdialog 直接 show(this) 也行 不过不是以模态的形式出来的 而是在form2上form1 始终置前

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明怪异的ShowDialog