我正在尝试使用本教程,以便我可以拥有一个透明按钮。它适用于主要背景,但不会覆盖其他孩子。如果我使用BringToFront()
它,那么应该没有其他孩子的绘画。
我已经开始通过将其添加到代码中来解决它:
foreach (Control child in Parent.Controls) {
if(child != this) {
InvokePaintBackground(child, pea);
InvokePaint(child, pea);
}
}
虽然我得到了一些我想要的东西,但它在错误的位置(在左边而不是在它应该在的中间),并且在孩子的绘画事件中绘制的形状也没有出现。
我该如何修改,以便我将拥有所有其他孩子以及完全透明的错觉?
注意:我不担心除了其他孩子之外的任何人的痛苦,因为我知道没有,还有很多其他地方可以找到如何递归地获取所有孩子。
感谢C.Evenhuis的回答,它现在正在工作。我的实现很简单(只有一个孩子),所以这是我的代码。对于未来的读者,请务必阅读该帖子以获得完整的范围。
using (PaintEventArgs pea = new PaintEventArgs(e.Graphics, rect)) {
pea.Graphics.SetClip(rect);
InvokePaintBackground(Parent, pea);
InvokePaint(Parent, pea);
foreach (Control child in Parent.Controls) {
if (child != this) {
pea.Graphics.ResetTransform();
pea.Graphics.TranslateTransform(child.Left - Left, child.Top - Top);
InvokePaintBackground(child, pea);
InvokePaint(child, pea);
}
}
}