屏幕闪烁

时间:2015-10-19 07:01:11

标签: c# winforms

我遇到屏幕闪烁问题。我读了一些关于这个案例的其他主题,但有些解决方案对我没有用,我认为这是因为我不知道究竟是什么导致了这个问题。

我的屏幕有很多控件,也许这就是导致问题的原因。我尽可能地将其描述为最好的。

  1. 首先,我使用WinForms

  2. 我正在制作视频游戏,所以屏幕应该始终最大化。

  3. 为了允许拉伸我使用TablePanels的所有控件,一个用于填充整个表单的大对象和一些较小的对齐填充大表格单元格。在这些表格的较小单元格中,按钮对接填充。

  4. 为了显示背景绘制按钮,我使控制按钮完全透明。它需要保持这种状态。

  5. 屏幕在TableLayoutPanels边框位置闪烁白色。

  6. 当鼠标进入按钮位置,任何按钮时,无论屏幕位于何处,屏幕都会闪烁。

  7. 目前,在游戏过程中只有一个元素会发生变化 - 一个标签。当鼠标进入按钮区域时,此标签会显示此按钮的作用。例如,如果我输入"使用"的区域按钮,标签显示单词" USE"。

  8. 我还没有尝试过,但我必须实现,按钮的某些图像会改变或变得透明,或者在游戏过程中失去透明度。就像封闭的橱柜可能有一个图像,但当玩家打开它时,会出现另一个打开橱柜的图像。我想我知道该怎么做,我想要的只是防止闪烁。

  9. 如果你建议使用一些代码(我希望它是需要的),请说明我应该把它放在哪里。

1 个答案:

答案 0 :(得分:0)

似乎问题解决了。 我会自己回答我的问题,万一其他人需要它。

这个问题是由一个标签造成的,虽然我猜不出原因。 我使用了许多TableLayoutPanel,其中一个填充整个表单。它有许多行,每个行也是一个TableLayoutPanel,或者只是一个Panel。 当我试图在主TableLayoutPanel中放置一个标签时,就会出现闪烁,而不是在子面板中。当我将一个Panel放在主表中并在其中标记时,大部分闪烁都消失了。

为了完全删除它,我使用了两个建议以防万一: 1)DoubleBuffering:Here(Fabjan回答) 2)Article also recommended by Fabian

之后,只剩下几个小故障。我做了一些测试,似乎当鼠标离开屏幕时发生了最后的故障,然后又回到了里面。我的游戏屏幕最大化,因此需要一些时间来检查。为了解决这个问题,我使用了一个简单的命令:

“Cursor.Clip = this.Bounds;”在FormLoad上

我是从本网站的另一个问题中了解到的:Here

不幸的是,我不明白,为什么错位的标签背后闪烁,但由于问题解决了,我决定在这里写,以防其他人需要它。