Мерцание объектов C# Windows Forms
написал простой код для проверки как работает наложение текстур в wf
при запуске происходит прогрузка текстур
пытался создать двойной буфер
заранее прогрузить текстурки
в любом из случаев вижу как сперва фон получает тектурку потом панель
код:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
class Program
{
[STAThread]
static void Main(string[] args)
{
List<string> texts = new List<string> { "Текст 1", "Текст 2", "Текст 3" };
int currentIndex = 0;
Form form1 = new Form();
form1.Text = "test";
form1.Size = new Size(1426, 900);
form1.BackgroundImage = Image.FromFile("fon.png");
form1.BackgroundImageLayout = ImageLayout.Stretch;
form1.KeyPreview = true;
PictureBox ana = new PictureBox();
ana.BackColor = Color.Transparent;
ana.Size = new Size(1000, 1000);
ana.Location = new Point(150, 150);
ana.Image = Image.FromFile("ana.png");
ana.SizeMode = PictureBoxSizeMode.Zoom;
Panel panel = new Panel();
panel.Size = new Size(200, 100);
panel.BackColor = Color.FromArgb(100, Color.Black);
panel.Location = new Point(50, 50);
Label label = new Label();
label.Text = texts[0];
label.ForeColor = Color.White;
label.Dock = DockStyle.Fill;
label.TextAlign = ContentAlignment.MiddleCenter;
panel.Controls.Add(label);
form1.KeyDown += (sender, e) =>
{
if (e.KeyCode == Keys.Tab) {
ana.Image = Image.FromFile("ana2.png");
ana.SizeMode = PictureBoxSizeMode.Zoom;
currentIndex = (currentIndex + 1) % texts.Count;
label.Text = texts[currentIndex];
}
};
form1.Controls.Add(panel);
form1.Controls.Add(ana);
Application.Run(form1);
}
}
ответ нашел сам
нужно сделать двойную буферизацию через CreateParams
public class CustomForm : Form
{
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // двойная буферизация
return cp;
}
}
}