【发布时间】:2009-07-27 20:20:48
【问题描述】:
我要做的是在标记为 mdi 容器的表单上画一些玻璃。但是,一旦设置了 IsMdiContainer,表单就会将 MdiClient 添加到其控件列表中。此时,父表单发生了一些事情 - 几乎就像一个深灰色面板停靠在 MdiClient 所在的整个表单上。
然后我做以下事情来将 MdiClient 控件移开一点:
foreach(var c in Controls)
{
if(c is MdiClient)
{
var client = (MdiClient)c;
client.BackColor = Color.Red;
client.Dock = DockStyle.None;
client.Size = new Size(this.Width-100, this.Height);
break;
}
}
这使得实际的 MdiClient 区域更小,因此我们可以看到它背后的内容(承载子窗体的位),并且很明显父窗体不是绘画或其他东西。
可以在这里看到:http://img525.imageshack.us/img525/8605/mdiglassproblem.png
我现在需要以某种方式让 MdiClient 后面的区域(在玻璃部分呈现为白色的深灰色部分)消失。
有什么想法吗?
PS - 在 Vista 中使用 DwmExtendFrameIntoClientArea 方法渲染 Glass。
【问题讨论】:
-
只是一个旁注; “if (c is MdiClient)”这一行是多余的。 'as' 运算符执行相同的检查,如果为 false,则返回 null。因此,只需使用“as”运算符,然后检查 null。
-
... 或坚持使用“is”并使用 C 样式转换,但我个人更喜欢另一种方法。
-
好的,但现在我很困惑 - 为什么你需要'灰色部分'消失?它总是落后于 ht MDIClient。只是不要移动/缩小客户端?