还不能对答案发表评论,因此“答案”只是对 Hans Passant 答案的(详细)评论。更具体地说,那部分:
其中有一个错误,它不能正确处理鼠标透明度
对于某些类型的颜色键值。 这个bug不好
特征,但我知道它不适用于 Color.Red 例如。
所以选择正确的关键颜色很重要。除非你想拿
利用该错误,一些程序员仍然希望鼠标事件
窗口的透明部分。
就是这样,我描述了这个错误。由于我在谈论一个错误,所以我觉得有必要提及以下信息对于 .Net Framework 4.5 自 2016 年 2 月 6 日起有效。
该错误实际上比异常更标准,因为它发生在 255/256 (99.6%) 的颜色中,并且仅针对 1/256 (0.4%) 的颜色,它的行为方式与记录的方式相同。
区分这两种情况的条件实际上很简单。如果颜色的红色分量与颜色的蓝色分量相同(Color.Red == Color.Blue),则 TransparencyKey 的行为与记录中的一样:
执行的任何鼠标操作,例如单击鼠标
在表格的透明区域上将被转移到
透明区域下方的窗口。
因此,大多数灰色、绿色和紫色(包括 Hans 的回答中提到的 Color.Fuchsia = 255,0,255) p>
任何其他颜色都会显示该错误,并且所有鼠标事件都将在透明控件上发生。换句话说,如果您想利用该漏洞,只需确保选择红色组件与蓝色组件不同的颜色 (Color.Red != Color.Blue)。 p>
由于我可能是第一个记录该错误的人,因此我无法引用任何参考资料,但所有 16,777,216 种 RGB 组合都已通过编程方式进行测试,因此,这种相关性在 100% 的情况下都是有效的。
p>
希望了解错误背后的规则将帮助某人明智地选择颜色,而不是随机尝试多种颜色,直到满足所需的行为。