C# 使用tabControl.TabPages[0].Controls.Add()时,如何停止窗体闪烁?

C# 使用tabControl.TabPages[0].Controls.Add()时,如何停止窗体闪烁?,c#,winforms,visual-studio-2012,tabcontrol,.net-4.5,C#,Winforms,Visual Studio 2012,Tabcontrol,.net 4.5,我使用下面的代码将表单添加到tabControls选项卡页面 private void btnStudents_Click(object sender, EventArgs e) { foreach (Form c in tabStudents.TabPages[0].Controls) { tabStudents.TabPages[0].Controls.Remove(c); c.Dispose();

我使用下面的代码将表单添加到tabControls选项卡页面

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();
    }
但是,问题是,单击按钮时(即加载表单时)有太多表单闪烁。我已尝试使用
选项卡CustomerAndOrders.TabPages[0].SuspendLayout();
选项卡Customers和Orders.TabPages[0].ResumeLayout();
`但这种闪烁并没有消失


我想从一种形式过渡到另一种形式,尽可能平滑

在TabControl上启用双缓冲可能会有所帮助。使用双缓冲,所有控件图形都渲染到内存中,然后仅在所有控件渲染完成时显示

这将意味着在完成之前有一个可见的延迟,但应消除多个控件渲染的闪烁效果

以下内容将启用双缓冲:

myTabControl.SetStyle(ControlStyles.DoubleBuffer | 
      ControlStyles.UserPaint | 
      ControlStyles.AllPaintingInWmPaint,
      true);

另一种选择(我推荐的一种)是从不同的角度看待这个问题。是否有任何方法可以更改UI设计,使这种表单填充预先缓存,或在呈现到屏幕之前发生?

在TabControl上启用双缓冲可能会有所帮助。使用双缓冲,所有控件图形都渲染到内存中,然后仅在所有控件渲染完成时显示

这将意味着在完成之前有一个可见的延迟,但应消除多个控件渲染的闪烁效果

以下内容将启用双缓冲:

myTabControl.SetStyle(ControlStyles.DoubleBuffer | 
      ControlStyles.UserPaint | 
      ControlStyles.AllPaintingInWmPaint,
      true);

另一种选择(我推荐的一种)是从不同的角度看待这个问题。是否有任何方法可以更改UI设计,使这种表单填充预先缓存,或在呈现到屏幕之前发生?

为了将此问题标记为已回答,我在这里发布了一个指向另一个stackoverflow问题的链接,该问题有我的问题的解决方案


这里是链接

为了将此问题标记为已回答,我在这里发布了另一个stackoverflow问题的链接,该问题有我的问题的解决方案


这是链接

只需将其粘贴到主GUI中即可:

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
                return cp;
            }
        }

这应该能解决你的问题。至少从我在网上搜索的许多东西来看,这一个很有帮助。

只需将其粘贴到您的主GUI中:

protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;  // Turn on WS_EX_COMPOSITED
                return cp;
            }
        }

这应该能解决你的问题。至少从我在网上搜索的很多东西来看,这一个很有帮助。

这个问题的答案解决了这个问题这个问题的答案解决了这个问题