我创建了一个派生自 Panel 的自定义控件。我用它来显示一个使用 BackgroundImage 属性的图像。我覆盖 OnClick 方法并将 isSelected 设置为 true,然后调用 Invalidate 方法并在覆盖的 OnPaint 中绘制一个矩形。一切都很好,直到我将 DoubleBuffered 设置为 true。矩形被绘制,然后被擦除,我不明白为什么会这样。
public CustomControl()
: base()
{
base.DoubleBuffered = true;
base.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
PaintSelection();
}
private void PaintSelection()
{
if (isSelected)
{
Graphics graphics = CreateGraphics();
graphics.DrawRectangle(SelectionPen, DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width - 1, DisplayRectangle.Height - 1);
}
}