首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在绘制循环时无效C# winforms

在绘制循环时无效C# winforms
EN

Stack Overflow用户
提问于 2015-03-30 17:56:47
回答 2查看 1.4K关注 0票数 0

我有一个画板,我在paint事件中这样做。我想在绘制之前删除之前的更改,但是如果我使用Invalidate()或Refresh(),它将永远重新绘制它(它是闪烁的),奇怪的是,我在任何绘制之前调用Invalidate(),所以如果它只是强制面板绘制,我应该看不到绘制

编辑:我想出来了:

代码语言:javascript
代码运行次数:0
运行
复制
        void _paint(object sender, PaintEventArgs e)
    {
        Panel P = (Panel)sender;
        if (painted = false) { painted = true; P.Invalidate(); }


        Shows(30);
        painted = false;
    }

它不再闪烁了。无论如何,事实证明我从来不需要它,即使没有失效,它也会重新绘制面板。但奇怪的是,当我只隐藏面板的一部分时(无论是通过调整窗体大小还是在面板上拖动窗口),当它再次变得可见时,它会被绘制,而不是重新绘制(我可以看出,因为抗锯齿变成纯色,产生糟糕的结果),这就是为什么我认为我需要使面板无效。无效并不能阻止它的发生。我认为可能是触发了另一个事件,而不是画图。

EN

回答 2

Stack Overflow用户

发布于 2015-03-30 17:59:50

当我用不久前创建的一个程序调用Invalidate时,我遇到了控件闪烁的问题。我发现覆盖OnPaintBackGround确实起到了作用,它可能也适用于您;

代码语言:javascript
代码运行次数:0
运行
复制
    protected override void OnPaintBackground(PaintEventArgs e)
    {
        /* Override to stop the background being repainted -> this stops flashing of the text */
    }
票数 0
EN

Stack Overflow用户

发布于 2015-03-30 19:01:41

首先,以下条件缺少=符号:

代码语言:javascript
代码运行次数:0
运行
复制
if (painted = false) { painted = true; P.Invalidate(); }

它应该显示为

代码语言:javascript
代码运行次数:0
运行
复制
if (painted == false) { painted = true; P.Invalidate(); }

代码语言:javascript
代码运行次数:0
运行
复制
if (!painted) { painted = true; P.Invalidate(); }

其次,在许多情况下,双缓冲是一个好主意。为此,请将所有内容绘制到与控件的工作区大小相同的屏幕外位图中,然后根据需要将该位图绘制到目标控件。不要在OnPaint事件中绘制屏幕外的位图,而是在要绘制的内容发生更改时绘制!

示例:

代码语言:javascript
代码运行次数:0
运行
复制
private void PaintOffscreen()
{
    // Do whatever necessary to draw the offscreen bitmap
    ...

    // Cause the control to repaint itself. Change OnPaint to draw the bitmap only
    Invalidate();
}

void _paint(object sender, PaintEventArgs e)
{
    e.Graphics.DrawImage(offscreenBitmap, 0, 0);
}

此外,按照HorHAY的建议重写OnPaintBackground方法,以防止控件在绘制自身之前清除背景。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29343228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档