Как заставить Pylint распознавать закрученных и эфемных участников?

Итак, во-первых, вы не хотите делать то же самое 3 раза. Создайте один метод, чтобы добавить соответствующие обработчики для кнопки, а затем просто напишите код один раз , чтобы обрабатывать любую данную кнопку.

Обратите внимание, что вы можете перейти к расширению / контракту и используйте значение percentComplete для установки высоты, чтобы переместить цвет по спектру (это потребует некоторой математики цветов, которые нужно сделать) или изменить любой другой аспект кнопки. Если вы действительно мотивированы, чтобы обобщить его, вы можете добавить параметр к методу Action<double>, который что-то делает для объекта на основе данного процента прогресса.

public void AddAnimation(Button button)
{
    var expandTimer = new System.Windows.Forms.Timer();
    var contractTimer = new System.Windows.Forms.Timer();

    expandTimer.Interval = 10;//can adjust to determine the refresh rate
    contractTimer.Interval = 10;

    DateTime animationStarted = DateTime.Now;

    //TODO update as appropriate or make it a parameter
    TimeSpan animationDuration = TimeSpan.FromMilliseconds(250);
    int initialWidth = 75;
    int endWidth = 130;

    button.MouseHover += (_, args) =>
    {
        contractTimer.Stop();
        expandTimer.Start();
        animationStarted = DateTime.Now;
        button.BackColor = Color.DimGray;
    };

    button.MouseLeave += (_, args) =>
    {
        expandTimer.Stop();
        contractTimer.Start();
        animationStarted = DateTime.Now;
        button.BackColor = Color.Red;
    };

    expandTimer.Tick += (_, args) =>
    {
        double percentComplete = (DateTime.Now - animationStarted).Ticks
            / (double)animationDuration.Ticks;

        if (percentComplete >= 1)
        {
            expandTimer.Stop();
        }
        else
        {
            button.Width = (int)(initialWidth +
                (endWidth - initialWidth) * percentComplete);
        }
    };

    contractTimer.Tick += (_, args) =>
    {
        double percentComplete = (DateTime.Now - animationStarted).Ticks
            / (double)animationDuration.Ticks;

        if (percentComplete >= 1)
        {
            contractTimer.Stop();
        }
        else
        {
            button.Width = (int)(endWidth -
                (endWidth - initialWidth) * percentComplete);
        }
    };
}
7
задан DonGar 17 June 2013 в 07:18
поделиться