使用下面的代码将表单添加到tabControls tabPage
private void btnStudents_Click(object sender, EventArgs e)
{
foreach (Form c in tabStudents.TabPages[0].Controls)
{
tabStudents.TabPages[0].Controls.Remove(c);
c.Dispose();
}
//load form
StudentsMasterForm f = new StudentsMasterForm
{
TopLevel = false,
FormBorderStyle = FormBorderStyle.None,
Dock = DockStyle.Fill
};
tabStudents.TabPages[0].Controls.Add(f);
f.Show();
}
然而问题是,单击按钮时(即加载表单时)表单闪烁太多。我尝试过使用tabCustomersAndOrders.TabPages[0].SuspendLayout();
和tabCustomersAndOrders.TabPages[0].ResumeLayout();
`但闪烁不会消失。
我希望从一种形式过渡到另一种形式,以尽可能顺利。
答案 0 :(得分:1)
在TabControl上启用双缓冲可能会有所帮助。通过双缓冲,控制图形全部渲染到内存中,然后仅在所有控件渲染完成时显示。
这意味着可见延迟直到完成,但应该消除多个控件渲染的闪烁效果。
以下将启用双缓冲:
myTabControl.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
另一种选择(我推荐的那种)是从不同角度看待问题。有没有什么方法可以改变UI设计,以便预先缓存这种表单填充,或者在渲染到屏幕之前发生?
答案 1 :(得分:0)
为了将这个问题标记为已回答,我在这里发布了另一个stackoverflow问题的链接,该问题解决了我的问题。
答案 2 :(得分:0)
只需将其粘贴到主GUI中:
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
这应该可以解决您的问题。至少从我在网络上搜索到的许多内容来看,这很有帮助。