winform中panel刷新闪烁的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform中panel刷新闪烁的问题相关的知识,希望对你有一定的参考价值。

panel中的控件是动态生成的,通过定时器每四秒调用一次生成方法。
每次调用时都会clear一下里面所有的控件,再添加。(试过refresh没作用)
现在的问题是,每调一次都会闪烁一下,这应该如何解决。

如果你说的闪烁是先clear然后添加控件那次,这个是无法避免的。你本身就是先删除后添加,肯定会闪烁一下的。除非你将方法改为不删除,直接判断里面的控件是否有过修改,如果修改了,只刷新修改的那个控件。
而且这个闪烁是很微小的,只会闪烁一下,对程序影响不是很大。

如果你说的是因为控件颜色设置为透明而产生的不断刷新问题,那么建议你先尽量减少使用透明颜色,然后在透明颜色的地方用双缓存DoubleBuffer
参考技术A 窗体有个DoubleBuffered(双缓冲)属性,设置成true试一下吧! 参考技术B 不需要这样做的 控件画好就不去动它了 调用的时候直接改变控件调用的方法就可以了 参考技术C AJAX

在 winforms 中获取控件的父级

【中文标题】在 winforms 中获取控件的父级【英文标题】:Get Parents of a Control in winforms 【发布时间】:2013-05-09 21:43:05 【问题描述】:

我在这个Panel2 和这个Panel3 里面有Panel1...所以想象一下

Panel1->Panel2->Panel3->button1

那么怎样才能得到这样的路径字符串

string path=\Panel1\Panel2\Panel3\button1

如果我想获得 button1 的所有父母。 我可以通过定义一个实现 IExtenderProvider 的类来做到这一点,那么是否可以在设计时实现它。

【问题讨论】:

Control.Parent 可能是您想要的。您能否详细说明设计时的概念——例如设置字符串与设计时相比与运行时有何不同? @JeremyThompson 啊,我的错...我的意思是我不想使用 Control 的标签属性来分配标签属性控制路径。我想使用扩展器类,所以在我的程序中我想获取该属性的值(路径) 【参考方案1】:

这是一个将所有父母的名字作为IEnumerable<string>的扩展方法:

public static class Extensions

    public static IEnumerable<string> GetControlPath(this Control c)
    
        yield return c.Name;

        if (c.Parent != null)
        
            Control parent = c.Parent;

            while (parent != null)
            
                yield return parent.Name;
                parent = parent.Parent;
                            
        
    

这是我添加到将使用它的项目的 UserControl 的属性:

public partial class CustomControl : UserControl

    public CustomControl()
    
        InitializeComponent();
    

    public string ControlPath
    
        get
        
            return string.Join(@"\", this.GetControlPath().Reverse());
        
    

构建后,将用户控件从工具箱拖到窗体上。一定要很好地将它嵌套在其他控件中。我嵌套了 3 个面板并将其放在与您的示例类似的最里面的面板中。以下是设计时属性的外观:

这应该适用于您从Control 派生的任何类。 IExtenderProvider 在这里似乎无关紧要。

【讨论】:

以上是关于winform中panel刷新闪烁的问题的主要内容,如果未能解决你的问题,请参考以下文章

解决winform中的panel重绘闪烁问题

winform 控件移动的闪烁问题

在winform上添加用户控件过多时出现闪烁

解决Winform应用程序中窗体背景闪烁的问题

解决Winform应用程序中窗体背景闪烁的问题

Winform刷新时界面假死闪烁