这似乎是一个错误,如果您将表单大小更改为以前的透明区域,则将不再检测到鼠标事件。
如何重现它:
- 创建一个新的 Windows 窗体项目
- 将 Form1 TransparencyKey 设置为洋红色
- 向 Form1 添加面板并将其配置为:
- 停靠填充
- 背景颜色为洋红色
运行,现在尝试更改窗体大小,如果减小它(足够新边框将放置在当前透明区域上方),鼠标将不再“检测”该侧的窗口边框。如果您最小化/恢复窗口,它将再次工作。我该如何解决这个问题?我尝试在表单布局/调整大小事件上刷新,但没有成功。
最佳答案
只是为了确认一下,是的,这是 Windows 8.1 上当前 Aero 实现中的一个错误。可能是之前。已经存在很长一段时间了,这似乎是一个相当结构性的问题。它是与具有透明度键设置的分层窗口相关的一组错误的一部分,并且使鼠标对此类窗口透明,它也无法在某些颜色选择下正常工作 key 。在这种特定情况下,它也不恰本地使框架对点击透明。
很难给出具体建议,这确实需要调用 Microsoft 支持才能取得进展。从技术上讲,您可以利用另一个错误,当您选择“红色”作为透明键时,窗口对于鼠标单击永远不会透明:
public Form1() {
InitializeComponent();
this.TransparencyKey = panel1.BackColor = Color.Red;
}
解决了您正在处理的错误,但当然完全禁用了鼠标透明度。您几乎肯定不会喜欢的解决方法是:
protected override void OnResizeEnd(EventArgs e) {
base.OnResizeEnd(e);
this.RecreateHandle();
}
太引人注目了。程序员开始利用这些错误,有时他们故意想要这种缺乏透明度的情况。让你想知道微软如何在不破坏某些程序的情况下解决这个问题。不太漂亮。
关于c# - 如果将窗体大小调整为以前的透明区域,则不再检测窗体上的鼠标事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27400556/