在Windows窗体OnPaint
的{{1}}内,我将单个字打印到32x32“单元格”网格中。
由于定位的原因,并且因为单词需要以不同的颜色(全部和部分)打印,我为每个值调用PictureBox
,因此在TextRenderer.DrawText()
内有一个循环导致1000 +致电OnPaint
。
这没问题。
我添加了代码以允许在DrawText
。
在PictureBox
中(如果设置了MouseMove
标志)我捕获鼠标当前所在的单元格;如果它和我上次没有做的一样,否则我需要绘制/更新选择矩形,我这样做是通过:
_isDragging
PictureBox.Invalidate(this.GetSelectionRect());
返回我想要绘制的选区的矩形。
在设置GetSelectionRect()
的{{1}}结束时,我绘制一个Alpha矩形以显示所选项目。
这是有效的,我的选择矩形被绘制在它应该的位置,但问题是它是滞后的 - 它落后于拖动光标(尽管没有闪烁)。
这显然是因为OnPaint
需要在绘制完矩形之前渲染所有内容,而_isDragging
在拖动时每秒会导致多个绘制。
这种方法似乎不是做事的方式,我认为我错过了一些明显的东西。
我想知道避免这种情况的标准方法是什么?即减轻OnPaint
需要做的工作量?