相关疑难解决方法(0)

C#Form.TransparencyKey针对不同的颜色工作不同,为什么?

昨天我发现了一些非常奇怪的东西(我想).它看起来像Form.TransparencyKey基于哪种颜色作为上给出不同的结果BackgroundColorTransparencyKey.如果要重现此,请执行以下操作:

  1. 创建新的Windows窗体应用程序
  2. 放下Panel表格
  3. 将它BackgroundColor设为"Green" ,并将Form1设置TransparencyKey为Green
  4. 运行程序并将带有"孔"的表单放在某些内容上,您将看到可以单击该漏洞(如MSDN所述)
  5. 现在将两种颜色更改为"红色"并运行应用程序 - 您将看到"洞",但您不再可以点击它

你知道为什么会这样吗?规则是什么?我正在使用带有VS2010的.NET 4,在具有相同配置的两台计算机上进行了测试.

这个代码不多......但我可以在设计师中发布设置:

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"; …
Run Code Online (Sandbox Code Playgroud)

.net c# winforms

12
推荐指数
1
解决办法
4270
查看次数

具有透明背景的Windows窗体,可以单击

介绍

使用C#或VB.NET.我正在尝试使表单的背景透明; 这个表单将叠加到其他窗口,它将是最顶层的窗口,因此透明表单(及其控件)必须具有不能获得焦点的能力,并且必须可以单击它们,这意味着如果例如我在透明背景上执行左键单击,然后在该背景上的窗口(在Z顺序窗口中)是必须接收单击的窗口.

笔记:

为了避免焦点,我正在覆盖这里CreateParams所解释的财产.

为了使我的形式透明,我打电话的Win32 DwmExtendFrameIntoClientArea函数,并且还使用SharpDX库作为解释在这里.但我认为这与问题本身无关.

问题

我将展示我使用图像的意思.下面是与文本编辑器程序窗口重叠的表单图像(没有透明度,只是为了简化理解); 请注意,我的表单没有获得焦点.好吧,问题是当我点击表单的背景(或其中一个控件)时,背景上的窗口(文本编辑器窗口)仍然具有焦点但它无法接收到点击.

在此输入图像描述

这是上面相同的图像,但是透明的形式:

在此输入图像描述

研究

我不确定要调查什么,所以我试图通过覆盖透明窗体的Window过程(WndProc)来测试相关的窗口消息,例如WM_NCHITEST或者试图在试错阶段找到有用的东西.WM_MOUSEACTIVATE消息如下所述:

.net c# vb.net winforms sharpdx

7
推荐指数
1
解决办法
704
查看次数

标签 统计

.net ×2

c# ×2

winforms ×2

sharpdx ×1

vb.net ×1