昨天我发现了一件很奇怪的事情(我想)。看起来Form.TransparencyKey
会根据BackgroundColor
和TransparencyKey
使用的颜色给出不同的结果。如果要复制此文件,请执行以下操作:
1.新建Windows窗体应用程序
1.将Panel
拖放到表单上
1.将其设置为“Green”(绿色)作为BackgroundColor
,并将Form 1的TransparencyKey
也设置为Green
1.运行程序,并把窗体与“洞”的东西,你会看到,你可以点击通过该洞(如所描述的MSDN)
1.现在改变这两种颜色为“红色”和运行应用程序-你会看到“洞”,但你不再可以点击通过它
你知道为什么会这样吗规则是什么?我正在使用.NET 4和VS2010,在两台配置相同的计算机上进行了测试。
没有太多的代码为这个…但是我可以在设计器中发布设置:
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.Red;
this.panel1.Location = new System.Drawing.Point(23, 26);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(229, 176);
this.panel1.TabIndex = 0;
//
// Form1
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 262);
this.Controls.Add(this.panel1);
this.Name = "Form1";
this.Text = "Form1";
this.TransparencyKey = System.Drawing.Color.Red;
this.ResumeLayout(false);
}
//that outside:
private System.Windows.Forms.Panel panel1;
1条答案
按热度按时间yruzcnhs1#
我以前听说过这个问题,但从未意识到它与TransparencyKey选择有关。很好的发现。几乎可以肯定是由Aero引起的。禁用此功能后,将通过使用视频适配器中的硬件覆盖来实现效果。启用它后,桌面窗口合成功能将实现它。在DWM赶上并将该区域替换为背景中窗口的像素之前,通常可以通过透明颜色的非常短暂的 Flink 来判断。关闭窗口的DWM可能会解决这个问题,但也会丢失玻璃效果。
我可以看到小韵或原因的颜色值,看起来很随机给我。很难把它叫做bug。我以前从来没有遇到过这种情况,我总是使用相同的透明度键。紫红色,一种极好的紫红色。推荐。
更新:用户Simpleton深入研究了deeper的这种行为,并得出了一些有价值的结论。
它似乎与Win8的一个新功能有关,透明度过去仅限于顶级窗口(.NET中的窗体),但从Win8开始,子窗口也可以拥有它。启用该功能需要一个清单条目,当存在时,它修复了古怪的行为。您所要做的就是声明您的应用程序与Win8兼容。项目>添加新项>选择“应用程序清单文件”并确保此条目存在: