11

出席マーキングの目的でTableLayoutPanelを使用しています。このTableLayoutPanel内にコントロール(パネルとラベル)を追加し、それらのイベントを作成しました。いくつかの条件では、すべてのコントロールをクリアし、TableLayoutPanelの異なる位置に同じコントロールをバインドしました。コントロールを再バインドしている間、TableLayoutPanelがちらつき、初期化が遅すぎます。

4

7 に答える 7

22

すべてのコントロールを追加するまで、レイアウトを一時停止します。

TableLayoutPanel panel = new TabelLayoutPanel();
panel.SuspendLayout();

// add controls

panel.ResumeLayout();

ダブルバッファリングの使用も検討してください。TableLayoutPanelのサブクラスを作成する必要があります。こちらの例をご覧ください。

于 2011-07-13T10:40:40.057 に答える
10

これは私にとってはうまくいきましたWindowsフォームのTableLayoutPanel&Panelによるちらつきを削除します

ここにそのリンクの内容があります(逐語的にコピーされます)

WindowsフォームのTableLayoutPanelとPanelによるちらつきを完全に削除するには、次のようにします。=-1. Form=trueのdoublebufferedプロパティを設定します。2.form.csに次の2つの関数を貼り付けます

#region .. Double Buffered function ..
   public static void SetDoubleBuffered(System.Windows.Forms.Control c)
    {
        if (System.Windows.Forms.SystemInformation.TerminalServerSession)
            return;
        System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered",
        System.Reflection.BindingFlags.NonPublic |
        System.Reflection.BindingFlags.Instance);
        aProp.SetValue(c, true, null);
    }

   #endregion


   #region .. code for Flucuring ..

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

    #endregion
  1. 、、、およびすべてのコンテナコントロールをSetDoubleBuffered(“TableLaoutPannel_controlName”)呼び出します。TableLayoutPannelPannelSplitcontainerDatagridview

RhishikeshLatheに感謝します投稿日:2014年2月16日20:11 pm

于 2016-11-11T07:42:05.250 に答える
7

VB.net:

   Protected Overrides ReadOnly Property CreateParams() As CreateParams
        Get
            Dim cp As CreateParams = MyBase.CreateParams
            cp.ExStyle = cp.ExStyle Or &H2000000
            Return cp
        End Get
    End Property

C#:

    protected override CreateParams CreateParams
    {
     get
     {
      CreateParams cp = base.CreateParams;
      cp.ExStyle = cp.ExStyle | 0x2000000;
      return cp;
     }
    }

VBで、影響を受けるクラスの一番下に追加すると、確実に機能します。

C#では、他のプロパティと一緒にプロパティをクラスの一番上に追加します。

基本的に、Winformの完全なレンダリングを待機し、画面にペイントされているフォームのちらつきを取り除きます。テストしたことがない場合は、無視しないでください。私はwinformの待ち時間に大きな問題を抱えていましたが、これで修正されました。

于 2019-04-25T13:35:05.030 に答える
1

このパネルを使用して、プロパティdBufferをtrueに設定します

public partial class MyTableLayoutPanel : TableLayoutPanel
{
        public MyTableLayoutPanel()
        {
            InitializeComponent();
        }

        public MyTableLayoutPanel(IContainer container)
        {
            container.Add(this);
            InitializeComponent();
        }

        /// <summary>
        /// Double buffer
        /// </summary>
        [Description("Double buffer")]
        [DefaultValue(true)]
        public bool dBuffer
        {
            get { return this.DoubleBuffered; }
            set { this.DoubleBuffered = value; }
        }
}
于 2014-10-23T07:57:09.113 に答える
1

UIのかなりの部分が背景色に透明度を使用していたため、最終的に使用した別の方法があります。これにより、WINFORMSのパフォーマンスが大幅に低下することを理解しています。ただし、これはWPFアプリケーション(通常はちらつきとして表示されない)には当てはまらないため、変換は有益である可能性があります。

于 2019-07-16T11:54:24.910 に答える
0
//Call this function on form load.
SetDoubleBuffered(tableLayoutPanel1);


public static void SetDoubleBuffered(System.Windows.Forms.Control c)
        {
            if (System.Windows.Forms.SystemInformation.TerminalServerSession)
                return;
            System.Reflection.PropertyInfo aProp = typeof(System.Windows.Forms.Control).GetProperty("DoubleBuffered",
            System.Reflection.BindingFlags.NonPublic |
            System.Reflection.BindingFlags.Instance);
            aProp.SetValue(c, true, null);
        }

//テーブルレイアウトパネルのダブルバッファソリューションで完全に機能し、ちらつきは発生しません

于 2019-08-14T05:43:52.787 に答える
-1

上記の改善として、私はより良い結果を得ました:

    TableLayoutPanel panel = new TabelLayoutPanel();
    panel.SuspendLayout();
    panel.StopPaint();

    // add controls

    panel.ResumePaint();
    panel.ResumeLayout();
于 2013-10-18T13:11:42.233 に答える