如何在Winform中像循环一样连续绘制矩形

时间:2014-10-24 13:18:10

标签: c# winforms user-interface drawing rectangles

我需要在Winform中绘制像这样的图像的矩形:

enter image description here

我也应该更清楚。我想实现这个场景:让我们说有一个类似于" ABCDEFG"的形式的文本。当用户点击B字母时,我想添加一个带有颜色(高亮)的背景矩形到该字母和连续的3个字母(在这种情况下,我想要突出显示BCD)。

在一个方法中我尝试了这个:

for (int i = 0; i < 5; i++)
{
    letterArea = new Rectangle(rectStartX, rectStartY, (int)Math.Ceiling(charSize.Width), (int)Math.Ceiling(charSize.Height));
    rectStartX += (int)Math.Ceiling(charSize.Width);
}

我在此方法结束时调用Invalidate()。在OnPaintBackGround中,我有以下几行:

Rectangle rectContent = vsr.GetBackgroundContentRectangle(e.Graphics, this.ClientRectangle);
e.Graphics.FillRectangle(new SolidBrush(Color.Red), letterArea);

其中letterArea是一个类字段。我在另一个问题中读到,在循环中调用Invalidate()并不能保证调用OnPaintBackground。我对计算坐标不感兴趣,相反,我感兴趣的是我必须绘制矩形的方法以及在哪里调用Invalidate()以及什么是有效的解决方案? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您应该使用OnPaint方法绘制矩形,而不是OnPaintBackground

另请注意,调用Invalidate()并不会强制执行同步绘制。要强制执行同步绘制,请在调用Update()后调用Invalidate()或使用与Invalidate + Update相同的Refresh()(但也会影响子控件)。请参阅MSDN以供参考。