C# 要放置在picturebox中的透明控件
我有一个PNG文件,它在我的winform上的picturebox中显示十字光标。我创建了一个用户控件,其中包含另一个小图片框(绿点)和一个标签 我想做的是将用户控件放置在图片框上,以便只有点和标签可见。控件的方形边不可见 由于png实际上是方形的,所以点具有白色边缘,因此我尝试将透明度关键点设置为白色,但当我将控件添加到图片框中时,白色的所有内容都是透明的C# 要放置在picturebox中的透明控件,c#,winforms,user-controls,picturebox,C#,Winforms,User Controls,Picturebox,我有一个PNG文件,它在我的winform上的picturebox中显示十字光标。我创建了一个用户控件,其中包含另一个小图片框(绿点)和一个标签 我想做的是将用户控件放置在图片框上,以便只有点和标签可见。控件的方形边不可见 由于png实际上是方形的,所以点具有白色边缘,因此我尝试将透明度关键点设置为白色,但当我将控件添加到图片框中时,白色的所有内容都是透明的 我想如果我用一种颜色在点的边缘上色,那么我可以用透明键来匹配,但是颜色必须精确(对吗?),我唯一的绘画方法是在windows paint中
我想如果我用一种颜色在点的边缘上色,那么我可以用透明键来匹配,但是颜色必须精确(对吗?),我唯一的绘画方法是在windows paint中,所以我不知道是否匹配了颜色。有什么帮助吗?您遇到的问题是WinForms控件不支持真正的透明性,让它们这样做可能有点棘手。他们所做的是在自己下面绘制子控件(当透明度通过SetStyle启用时),但这有它自己的怪癖。您应该首先尝试以下内容:
// in your custom control class...
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
我发现此方法比以下方法更可靠,但您也应该尝试此方法:
public MyTransparentControl()
{
SetStyle( ControlStyles.SupportsTransparentBackColor |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint, true );
BackColor = Color.Transparent;
}
作为一种替代方法,您是否考虑过使用WPF而不是WinForms?我知道这并不总是一个选项,但如果是这样的话,您的生活会变得更加轻松,因为WPF控件支持透明度和控件开箱即用的分层功能。我需要担心父对话框上的透明度键吗?第一个例子比第二个好一点。标签的背景和我控件中图片框的背景仍然存在。控件的其余部分不可见。这个例子可以扩展到那些项目吗?@Jason:你不必担心使用这种方法的透明度。对于每个应该有“透明”背景的控件,都需要执行相同的操作。这意味着派生您自己的标签类等。但是,对于标签使用第二个示例(
SetStyle
是一个公共方法),对于主覆盖控件使用第一个示例就足够了。