Как избежать мерцания в TableLayoutPanel в c#.net
Я использую TableLayoutPanel для целей маркировки посещаемости. Я добавил элементы управления (панель и метку) внутри этой TableLayoutPanel и создал для них события. В некоторых условиях я очистил все элементы управления и приступил к привязке тех же элементов управления в другом положении TableLayoutPanel. При повторной привязке элементов управления TableLayoutPanel мерцает и слишком медленно инициализируется.
5 ответов
приостановить макет, пока не будут добавлены все элементы управления.
TableLayoutPanel panel = new TabelLayoutPanel();
panel.SuspendLayout();
// add controls
panel.ResumeLayout();
также посмотрите на использование двойной буферизации. Вам нужно будет создать подкласс TableLayoutPanel. Пример здесь.
это отлично сработало для меня удалить мерцание из-за TableLayoutPanel & Panel в windows form
вот что в этой ссылке (скопировал дословно)
вполне извлеките мелькать должный к TableLayoutPanel & панели внутри windows form выглядит следующим образом:=- 1. Задайте свойство двойной буферизации Form =true. 2. Вставьте следующие 2 функции в форму.cs
#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
- вызов
SetDoubleBuffered(“TableLaoutPannel_controlName”)
для каждогоTableLayoutPannel
,Pannel
,Splitcontainer
,Datagridview
и все контейнера контроли.спасибо Ришикешлате Опубликовано 16-Feb-14 20:11pm
используйте эту панель для установки свойства 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; }
}
}
этот код, представленный по другому вопросу, прибил его, он использует вызов API для установки перерисовки TableLayoutPanel.
как улучшение вышеизложенного, у меня были лучшие результаты с:
TableLayoutPanel panel = new TabelLayoutPanel();
panel.SuspendLayout();
panel.StopPaint();
// add controls
panel.ResumePaint();
panel.ResumeLayout();