C#Windows窗体:拆分器闪烁 [英] C# Windows Forms: Splitter flickering
本文介绍了C#Windows窗体:拆分器闪烁的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我遇到以下问题:我在窗体中放置了一个拆分器控件(而不是拆分容器),并添加了2个面板.分离器工作正常,但是当我移动分离器时,它开始闪烁-面板不工作.
I have the following problem: I placed a splitter-control (not split-container) in my form and added 2 panels. The splitter works properly but when I move the splitter, it starts to flicker - the panels dont.
使用分割容器可以获得相同的结果.
I get the same result with a Split-Container.
我尝试了这个,但是没有用
I tried this but nothing works
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;
...
class XSplitter : Splitter
{
public XSplitter() : base()
{
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;
}
}
class XPanel : Panel
{
public XPanel() : base()
{
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.DoubleBuffered = true;
}
}
我使用Windows 8.1和VS 2010
I use Windows 8.1 and VS 2010
寻求帮助!
推荐答案
以下是使用此控件的步骤:
Here are the steps to use this control:
- 将新类"NonFlickerSplitContainer"添加到C#应用程序中.
- 用下面显示的C#代码替换自动生成的类代码.
-
在应用程序中使用NonFlickerSplitContainer对象而不是SplitContainer对象.
- Add new class "NonFlickerSplitContainer" to your C# application.
- Replace auto generated class code with C# code shown below.
Use NonFlickerSplitContainer object instead of SplitContainer object in your application.
public partial class NonFlickerSplitContainer : SplitContainer
{
public NonFlickerSplitContainer()
{
this.SetStyle(ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.OptimizedDoubleBuffer, true);
MethodInfo objMethodInfo = typeof(Control).GetMethod("SetStyle",BindingFlags.NonPublic|BindingFlags.Instance);
object[] objArgs = new object[] { ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.OptimizedDoubleBuffer, true };
objMethodInfo.Invoke(this.Panel1, objArgs);
objMethodInfo.Invoke(this.Panel2, objArgs);
}
}
这篇关于C#Windows窗体:拆分器闪烁的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文