我遇到了一个问题,希望你们中的好思想家可以克服...

出于某种原因,一旦我加载了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中的焦点提示处理相当奇怪,请进行彻底测试以确保不会产生意外的副作用。

09-25 22:23