昨天我发现了一些非常奇怪的东西(我认为)。看起来Form.TransparencyKey根据使用哪种颜色作为BackgroundColorTransparencyKey提供不同的结果。如果要重现此内容,请执行以下操作:

  • 创建新的Windows窗体应用程序
  • 表单上放置一个Panel
  • 将其“绿色”设置为BackgroundColor,并将Form1的TransparencyKey也设置为Green
  • 运行程序并将带有“孔”的Form放在某物上,您会看到可以单击该孔(如MSDN所述)
  • 现在将两种颜色都更改为“红色”并运行应用程序-您将看到“孔”,但不再可以单击它。

  • 你知道为什么会这样吗?有什么规定?我正在将.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;
    

    最佳答案

    我以前曾听说过此问题,但从未意识到它与TransparencyKey选择有关。好发现。几乎可以肯定这是由Aero引起的。禁用此功能后,将通过使用视频适配器中的硬件覆盖来实现效果。启用它后,桌面窗口合成功能将实现它。通常,您可以在DWM赶上并用背景窗口中的像素替换该区域之前,通过非常简短的闪烁来告诉您透明色。关闭窗口的DWM可能会解决此问题,但同时也会失去玻璃效果。

    我可以看到颜色值的韵律或原因,对我来说看起来很随意。除了漏洞以外,很难将其称为其他任何东西。我从来没有遇到过这个问题,我总是使用相同的透明键。紫红色,一种出色的深红色。推荐的。

    关于c# - C#Form.TransparencyKey对于不同的颜色工作不同,为什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4448771/

    10-10 22:56