在我的WinForm应用程序中,我需要分层图像。但是,我无法通过透明控件来放置图像。我做了一些研究并提出了以下课程:
public class TransparentPicture : PictureBox
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x20;
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
// do nothing
}
protected override void OnMove(EventArgs e)
{
RecreateHandle();
}
}
这似乎工作正常,直到我关闭Visual Studios并重新打开解决方案。然后我的控件全部消失在设计师中。它们显示我运行程序的时候,但是我需要它们在设计师中展示我可以继续设计我的应用程序。
我知道这不是我需要做的一切,因为这些控件总是导致我的程序冻结几秒钟和东西。
所以我的问题是......如果有人知道我在哪里可以找到透明控件的代码,或者如何修复我扔在一起的代码?
答案 0 :(得分:0)
使TransparentPicture成为常规PictureBox,直到IsTransparent属性设置为true。
在设计时将属性设置为false,并在FormLoad事件中设置为true(仅在实际运行应用程序时才会发生)。
这样,在设计时,它们将表现为常规图片框,但是当您运行应用程序时,它们将变得透明。
public class TransparentPicture : PictureBox
{
public bool IsTransparent { get; set; }
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
if (this.IsTransparent)
{
cp.ExStyle |= 0x20;
}
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs e)
{
if (!this.IsTransparent)
{
base.OnPaintBackground(e);
}
}
protected override void OnMove(EventArgs e)
{
if (this.IsTransparent)
{
RecreateHandle();
}
else
{
base.OnMove(e);
}
}
}
然后,在FormLoad事件中,您应该:
for (var i = 0; i < this.Controls.Count; i++)
{
var tp = this.Controls[i] as TransparentPicture;
if (tp != null)
{
tp.IsTransparent = true;
}
}
或者如果你只有几个:
tp1.IsTransparent = tp2.IsTransparent = tp3.IsTransparent = true;