这是一个小例子:
带有图片框和按钮的常规旧表单。没有什么花哨。在按钮的点击事件中:
private void button1_Click(object sender, EventArgs e)
{
Form form = new Form();
form.MdiParent = this;
form.BackColor = Color.Red;
form.WindowState = FormWindowState.Maximized;
form.Show();
}
但是,当我单击按钮时,会发生这种情况:
图片框和按钮仍然显示,就像子窗体是透明的一样。关于如何改变这个有什么建议吗?我希望子表单能够像常规表单一样涵盖所有内容。
最佳答案
问题在于 MDI 子窗口是 MDI 客户端窗口的子窗口。深灰色背景的那一张。您放置在 MDI 父级上的任何控件都将具有更高的 Z 顺序并与 MDI 客户端窗口重叠。因此任何 MDI 子窗口。您可以将控件停靠到边缘,Winforms 将自动缩小 MDI 客户端窗口以适应剩余的空间。对于按钮来说,正确的做法是将其放在面板上并停靠面板。但这对图像没有帮助。
Winforms 使得获取对 MDI 客户端窗口的引用有点棘手,您必须迭代 MDI 父级的 Controls 集合才能找到它。像这样:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
this.IsMdiContainer = true;
foreach (Control ctl in this.Controls) {
if (ctl is MdiClient) {
ctl.BackgroundImage = Properties.Resources.Chrysanthemum;
ctl.BackgroundImageLayout = ImageLayout.Center; // doesn't work
break;
}
}
}
}
请注意评论,解决这个问题比我想象的要困难得多。为窗口实现 Paint 事件是一种选择,但它像廉价汽车旅馆一样闪烁。
关于c# - MDI 子窗体似乎让父窗体的控件显示为透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790820/