Мерцание обратного отсчета прозрачной этикетки

Я пытаюсь создать собственный класс меток с прозрачностью, и я искал много статей об этом, но мой случай отличается, потому что я пытаюсь сделать обратный отсчет с прозрачной меткой, а затем, когда я использую приведенный ниже пример кода успеха мерцание. Я использую таймер с интервалом, установленным на 100, а затем меняю текстовую пользовательскую метку. Я не знаю, что я могу сделать, чтобы повысить производительность при обновлении, есть идеи?

class CustomLabel : Label
{
    public CustomLabel()
    {
        this.SetStyle(ControlStyles.Opaque, true);
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
    }

    protected override System.Windows.Forms.CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle |= 0x20;
            return cp;
        }
    }
    public override string Text
    {
        get
        {
            return base.Text;
        }
        set
        {
            base.Text = value;
            RecreateHandle();
        }
    }
}

person Eldoran    schedule 11.04.2012    source источник


Ответы (1)


Он мерцает из-за вызова RecreateHandle(). Это воссоздает собственное окно Windows, мерцание неизбежно, поскольку вы видите, что старое окно уничтожается, а новое создается. Просто уберите звонок, в этом нет необходимости.

И не забудьте воспользоваться встроенной поддержкой. для прозрачности в элементе управления Label.

person Hans Passant    schedule 11.04.2012