0

am using below code to add a Form to a 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();
    }

the problem however is, there is too much form flickering when the button is clicked (i.e when the form is loaded). I have tried using tabCustomersAndOrders.TabPages[0].SuspendLayout(); and tabCustomersAndOrders.TabPages[0].ResumeLayout(); ` but the flickering isn't going away.

I want to transition from one form to another to be as smooth as possible.

4

3 に答える 3

2

TabControlでダブルバッファリングを有効にすると役立つ場合があります。ダブルバッファリングを使用すると、コントロールグラフィックはすべてメモリにレンダリングされ、すべてのコントロールレンダリングが完了したときにのみ表示されます。

これは、完了するまで目に見える遅延を意味しますが、複数のコントロールのレンダリングによるちらつきの影響を取り除く必要があります。

以下は、ダブルバッファリングを有効にします。

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

もう1つの方法(私がお勧めする方法)は、問題を別の角度から見ることです。この種のフォームの母集団が事前にキャッシュされるように、または画面にレンダリングする前に発生するようにUIデザインを変更する方法はありますか?

于 2012-11-29T12:09:56.440 に答える
1

Just paste this in your main GUI:

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

this should solve your problem. At least from many things that I searched over the web, this one helped.

于 2018-09-28T08:45:11.747 に答える
0

この質問を回答済みとしてマークする目的で、ここに私の質問の解決策がある別のスタックオーバーフロー質問へのリンクを投稿します。

ユーザーコントロールのちらつきを修正する方法のリンクは次のとおりです

于 2012-12-03T10:36:58.973 に答える