如果将窗体大小调整为以前透明的区域,则不再检测到窗体上的鼠标事件

本文关键字:窗体 不再 检测 事件 鼠标 区域 透明 调整 如果 | 更新日期: 2023-09-27 18:33:45

这是一个

错误,如果您将表单大小更改为以前的透明区域,则不再在其上检测到鼠标事件。

如何重现它:

  • 创建新的 Windows 窗体项目
  • 将 Form1 透明度键设置为洋红色
  • 将面板添加到 Form1 并将其配置为:
    • 码头填充
    • 背景色到洋红色

运行,现在尝试更改表单大小,如果您减小它(足以将新边框放置在当前透明区域上(,鼠标将不再"检测"该侧的窗口边框。如果最小化/还原窗口,它将再次工作。我该如何解决这个问题?我尝试了刷新表单布局/调整大小事件,但它不起作用。

如果将窗体大小调整为以前透明的区域,则不再检测到窗体上的鼠标事件

只是为了确认,是的,这是Windows 8.1上当前Aero实现中的一个错误。 可能以前。 已经存在了很长一段时间,似乎这是一个相当结构性的问题。 它是与设置了透明度键的分层窗口相关的一组错误的一部分,并且使鼠标对此类窗口透明,它也无法在键的某些颜色选择下正常工作。 在这种特定情况下,它不恰当地使框架对单击也透明。

很难给出具体建议,这确实需要致电Microsoft支持才能取得成功。 从技术上讲,您可以利用另一个错误,当您选择红色作为透明度键时,窗口永远不会对鼠标点击透明:

    public Form1() {
        InitializeComponent();
        this.TransparencyKey = panel1.BackColor = Color.Red;
    }

解决了您正在处理的错误,但当然会完全禁用鼠标透明度。 您几乎肯定不会喜欢的解决方法是:

    protected override void OnResizeEnd(EventArgs e) {
        base.OnResizeEnd(e);
        this.RecreateHandle();
    }

太明显了。 程序员开始利用这些错误,有时他们故意希望这种缺乏透明度。 让您想知道Microsoft如何在不破坏某些程序的情况下解决此问题。 不漂亮。