Появление и исчезновение заставки

В приложении Windows Forms на C #. У меня есть заставка с некоторыми многопоточными процессами, происходящими в фоновом режиме. Я бы хотел, чтобы когда я сначала отображал экран-заставку, я бы хотел, чтобы он «исчезал». И затем, когда все процессы закончатся, я хотел бы, чтобы экран-заставка «исчезла». Я использую C # и .NET 2.0. Спасибо.


person Timothy Carter    schedule 17.09.2008    source источник


Ответы (4)


Вы можете использовать таймер, чтобы изменить Уровень прозрачности формы.

person user7116    schedule 17.09.2008

При использовании свойства Opacity нужно помнить, что это тип double, где 1.0 - полная непрозрачность, а 0.0 - полная прозрачность.

   private void fadeTimer_Tick(object sender, EventArgs e)
    {
        this.Opacity -= 0.01;

        if (this.Opacity <= 0)
        {
            this.Close();
        }            
    }
person slyprid    schedule 17.09.2008
comment
Это постепенное исчезновение, а не нарастание. - person Joe Hildebrand; 17.09.2008
comment
Если бы таймер был установлен на быстрые 50 мс, а непрозрачность задана в процентах, то не заняло бы ли это постепенное исчезновение около 8 минут? - person mackenir; 04.11.2009
comment
@mackenir Если ваш таймер 50 мс / тик, то это займет 5 секунд. (1,0 / 0,01) = 100 * 50 мс = 5000 мс = ›5 с - person slyprid; 05.11.2009
comment
Привет @aarontfoley! Я взял на себя смелость отредактировать ваш ответ, чтобы удалить упоминание о том, что непрозрачность является «процентной», поскольку это противоречит следующему тексту (непрозрачность - значение от 0 до 1). Не стесняйтесь возвращаться и вносить изменения самостоятельно, или нет. Я знаю, как это может раздражать, когда твой ответ редактирует кто-то другой. Ваше здоровье. - person mackenir; 09.11.2009

Вы можете использовать свойство Opacity для формы, чтобы изменить затухание (от 0,0 до 1,0).

person RichS    schedule 17.09.2008

person    schedule
comment
так вы угасаете за 2 итерации? Я не могу назвать это постепенным исчезновением ... более того, я считаю, что ваш Thread.Sleep блокирует поток пользовательского интерфейса, тем самым предотвращая его обновление. - person Idan K; 09.11.2009
comment
Идан успокойся. Сначала я написал -0,5, и это была опечатка, на самом деле 0,05 могло быть лучше. Но вы можете использовать тот, который хотите ... Thread.Sleep () не блокирует пользовательский интерфейс, поскольку он дает место для Redraw. Возможно, не лучшее решение, но оно работает. - person Patrick Desjardins; 09.02.2010