c# - Alt 键导致表单重绘

标签 c# winforms repaint

我遇到了一个问题,我希望你们中的一位优秀的思想家能够克服...

出于某种原因,一旦我加载了我的 Windows 窗体,如果用户按下 Alt 键,该窗体将重新绘制并导致闪烁。

这只会在第一次发生,所以任何后续的 Alt 键都不会起作用。

我没有任何处理按键的菜单条或事件,所以我只能假设它是我没有设置的设置,或者是我在不知不觉中设置的。

仅供引用,表单在构造函数中执行以下操作

DoubleBuffered = true;
SetStyle(ControlStyles.OptimizedDoubleBuffer | 
         ControlStyles.AllPaintingInWmPaint, true);

这是因为我有许多面板和标签也执行相同的操作以实现透明度。

祈祷,你们中的一个人会知道为什么 ;)

最佳答案

将此代码粘贴到您的表单中:

    protected override void WndProc(ref Message m) {
        // Suppress the WM_UPDATEUISTATE message
        if (m.Msg == 0x128) return;
        base.WndProc(ref m);
    }

当我尝试时,它可以很好地抑制油漆。 Windows 中的焦点提示处理相当奇怪,请进行彻底测试以确保这不会产生意外的副作用。

关于c# - Alt 键导致表单重绘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8848203/

相关文章:

c# - 等待 Web 浏览器文档完成而不离开方法

winforms - Screen.WorkingArea 的单位

java - java中面板中的面板显示

java - 重画不更新?

java - 重绘在自定义面板中不起作用

c# - AutoMapper:将接口(interface)映射到抽象类——这可能吗?

c# - MVC - 域服务负责过滤还是存储库层?

c# - 使用 AJAX 或 ASP.NET 进行异步调用?

c# - 有人可以用英语向我解释这段 MSDN 代码吗?

mysql - 如何从 mysql 填充 datagridview 组合框 - vb.net