C# 当洋红色时,使用FillRectangle将.net绘制为位图失败

C# 当洋红色时,使用FillRectangle将.net绘制为位图失败,c#,winforms,C#,Winforms,使用上面的代码为给定的颜色在我的控件中绘制一个矩形。除非颜色是洋红色,否则效果很好,在这种情况下,它看起来是透明绘制的。我想这与将洋红视为透明的位图有关。如何关闭这种行为 mColourPopupContainer是一个用户控件(自定义颜色选择器) 您需要将属性设置为洋红色以外的颜色。此属性: 获取或设置表示窗体透明区域的颜色 默认情况下,它是洋红色,因此您的问题。如果您将其设置为其他颜色,而该颜色不应显示在表单上的其他任何位置,则问题应该会消失。我当前的解决方案不是很好:检测何时使用了洋红,并

使用上面的代码为给定的颜色在我的控件中绘制一个矩形。除非颜色是洋红色,否则效果很好,在这种情况下,它看起来是透明绘制的。我想这与将洋红视为透明的位图有关。如何关闭这种行为

mColourPopupContainer是一个用户控件(自定义颜色选择器)

您需要将属性设置为洋红色以外的颜色。此属性:

获取或设置表示窗体透明区域的颜色


默认情况下,它是洋红色,因此您的问题。如果您将其设置为其他颜色,而该颜色不应显示在表单上的其他任何位置,则问题应该会消失。

我当前的解决方案不是很好:检测何时使用了洋红,并将其更改为非洋红

var bmp = new Bitmap(16, 16);
var gBmp = System.Drawing.Graphics.FromImage(bmp );
Color col = Color.FromArgb(pdmsCol.Red, pdmsCol.Green, pdmsCol.Blue);
gBmp.FillRectangle(new SolidBrush(col), new Rectangle(0, 0, 16, 16));
mColourPopupContainer.Image = bmp;

它与mColourPopupContainer有关。不管是什么,从您的问题中完全不清楚。编辑:mColourPopupContainer是UserControlOK,但此代码在UserControl(自定义颜色选择器)中。这是否意味着它需要依赖父窗体?是的。来自MSDN:“如果分配给
TransparencyKey
属性的颜色与表单上的任何控件相同,它们也将以透明方式显示。”但我没有访问父表单的权限,这应该是一个通用的颜色选择器控件。Hmm。不确定该怎么办,您可能需要更改您的实现?除了在父窗体中设置
TransparencyKey
,我不确定还有其他方法可以做到这一点(尽管这并不意味着没有其他方法)。
      var col = Color.FromArgb(r, g, b);
      if (r==255 && g==0 && b==255 ) col = Color.FromArgb(r-1, g, b); // Don't use Megenta as it can be treated as transparent