winform中panel刷新闪烁的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform中panel刷新闪烁的问题相关的知识,希望对你有一定的参考价值。
panel中的控件是动态生成的,通过定时器每四秒调用一次生成方法。
每次调用时都会clear一下里面所有的控件,再添加。(试过refresh没作用)
现在的问题是,每调一次都会闪烁一下,这应该如何解决。
而且这个闪烁是很微小的,只会闪烁一下,对程序影响不是很大。
如果你说的是因为控件颜色设置为透明而产生的不断刷新问题,那么建议你先尽量减少使用透明颜色,然后在透明颜色的地方用双缓存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刷新闪烁的问题的主要内容,如果未能解决你的问题,请参考以下文章