gpt4 book ai didi

c# - 当 DoubleBuffered 设置为 true 时覆盖 OnPaint 的问题

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:47 27 4
gpt4 key购买 nike

我创建了一个派生自 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);
}
}

最佳答案

在您的 PaintSelection 中,您不应该创建一个新的 Graphics 对象,因为该对象将绘制到前台缓冲区,然后立即被后台缓冲区。

改为绘制在 PaintEventArgs 中传递的 Graphics:

protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
PaintSelection(pe.Graphics);
}

private void PaintSelection(Graphics graphics)
{
if (isSelected)
{
graphics.DrawRectangle(SelectionPen, DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width - 1, DisplayRectangle.Height - 1);
}
}

关于c# - 当 DoubleBuffered 设置为 true 时覆盖 OnPaint 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com