0

我正在使用下面的代码将表单添加到 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(); and tabCustomersAndOrders.TabPages[0].ResumeLayout(); `,但闪烁并没有消失。

我想从一种形式过渡到另一种形式,以尽可能顺利。

4

3 回答 3

2

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

这意味着在完成之前会有明显的延迟,但应该消除多个控件渲染的闪烁效果。

以下将启用双缓冲:

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

另一种选择(我推荐的)是从不同的角度看待问题。有什么方法可以改变 UI 设计,以便预先缓存这种形式的填充,或者在渲染到屏幕之前发生?

于 2012-11-29T12:09:56.440 回答
1

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

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

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

于 2018-09-28T08:45:11.747 回答
0

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

这是如何修复用户控件闪烁的链接

于 2012-12-03T10:36:58.973 回答