在Tab控件的TabPage中使用Panel控件时,我有很多子控件,如RichTextBox,Buttons,Labels等。
问题是当我在面板中滚动时,里面有一个闪烁。儿童控件没有像已经存在那样被平滑地显示/淹没/涂抹。
寻找可以使滚动平滑并消除闪烁效果的内容。 任何建议都会有所帮助。我尝试了其他几种方法,比如DoubleBuffered,但并没有真正起作用。
答案 0 :(得分:2)
我通过组合不同的其他建议解决了这个问题,下面是为我删除闪烁的代码,基本上是使用Win API将其变为DoubleBuffered。
public partial class SmoothScrollPanel : UserControl
{
public SmoothScrollPanel()
{
InitializeComponent();
// this.DoubleBuffered = true;
}
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc(ref Message m)
{
if ((m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
&& (((int)m.WParam & 0xFFFF) == 5))
{
// Change SB_THUMBTRACK to SB_THUMBPOSITION
m.WParam = (IntPtr)(((int)m.WParam & ~0xFFFF) | 4);
}
base.WndProc(ref m);
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
}