Ответы

Мерцание объектов 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);

}

}

По дате
По рейтингу
Аватар пользователя
Ученик
1мес

ответ нашел сам
нужно сделать двойную буферизацию через CreateParams

public class CustomForm : Form

{

protected override CreateParams CreateParams

{

get

{

CreateParams cp = base.CreateParams;

cp.ExStyle |= 0x02000000; // двойная буферизация

return cp;

}

}

}