BackColor переопределяется при каждом запуске

Рейтинг: 0Ответов: 1Опубликовано: 18.07.2023

делаю свою программу на winforms. разумеется, перерисовывал интерфейс, formborderstyle = none, все вытекающие в виде form1_mousedown с winapi для ее перемещения (возможно, дело именно в этом). у моей программы всего несколько цветов, они все темного оттенка, возьмем к примеру один backcolor - fromargb(52, 54, 53) - близко к черному. если запускать программу, то изначально у абсолютно любого контрола (кроме тех, что enabled = false) его классический светлый backcolor. я пробовал задавать backcolor на нужный и в form1(), и в form1_load, и там и там одновременно, однако это не помогает вообще. выглядит это как мерцание, потому как цвет со светлого резко меняется в черный, соответственно не обращать на это внимание нереально. странно, но цвет как бы не наследуется от формы (хотя если добавить новый контрол, его backcolor будет таким же, как и форма). используемое winapi (для перемещения формы, а так же для ее сворачивания (создан свой minimizebox)):

    public const int WM_NCLBUTTONDOWN = 0xA1;
    public const int HTCAPTION = 0x2;

    [DllImport("user32.dll")]
    private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("user32.dll")]
    private static extern IntPtr GetActiveWindow();
    private const int SW_MINIMIZE = 6;

    [DllImport("user32.dll")]
    public static extern bool ReleaseCapture();
    [DllImport("user32.dll")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);

Ответы

▲ 1

Проблема, скорее всего, связана с тем, что вы используете функцию WinAPI для реализации перемещения формы (WM_NCLBUTTONDOWN и HTCAPTION). При выполнении этой операции, возможно, происходит перерисовка контролов, что приводит к мерцанию цвета фона.

Одним из способов решения этой проблемы может быть использование метода DoubleBuffered для вашей формы. Этот метод позволяет создать двойной буфер, что уменьшает мерцание при перерисовке контролов.

Вы можете установить свойство DoubleBuffered для вашей формы следующим образом:

public class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
    }
}

Скорее всего, это должно Вам помочь.