Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Alt键导致窗体重新绘制_C#_Winforms_Repaint - Fatal编程技术网

C# Alt键导致窗体重新绘制

C# Alt键导致窗体重新绘制,c#,winforms,repaint,C#,Winforms,Repaint,我遇到了一个问题,我希望你们中的一位优秀思想家能够克服这个问题 出于某种原因,一旦我加载了我的Windows窗体,如果用户按Alt键,窗体就会重新绘制,从而导致闪烁 这只在第一次发生,因此任何后续按下Alt键都不会产生任何效果 我没有任何处理按键的菜单条或事件,因此我只能假设这是我没有设置的设置,或者是我无意中设置的设置 仅供参考,表单在构造函数中执行以下操作 DoubleBuffered = true; SetStyle(ControlStyles.OptimizedDoubleBuffer

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

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

嗯,按Alt键将焦点置于系统菜单上。这完全有可能也会导致WM_绘画信息。@Joey:我想是这样的,你知道防止这种情况发生的方法吗?谢谢;)我还没有在默认窗体和按钮上看到这种行为,这使我怀疑自定义控件。您是否可以尝试删除屏幕上一半的控件,以查看是否仍然发生重画?。删除另一半,只需对导致闪烁的控件进行二进制搜索。@CodingBarfield:谢谢,你的权利,我有很多自定义控件,但这些只是为了实现透明度和双缓冲。它似乎与填充了image/background image属性的控件相关。有什么建议吗?谢谢你,汉斯!我刚刚把它建立在我的表单基类中,马上就改善了这种情况。我会继续演奏,但到目前为止,它看起来非常有希望!!再次感谢你!