Получение ошибки NullReferenceException при вызове диалогового окна выбора файла - PullRequest
1 голос
/ 08 марта 2010

Это настоящий вопрос новичка. У меня есть простое приложение, которое выбирает изображение и отображает его в PictureBox.

Я решил возиться с атрибутом непрозрачности, поэтому добавил таймер и создал этот крутой эффект, когда непрозрачность основной формы увеличивается на 20% каждые 400 миллисекунд.

Проблема в том, что теперь, когда я нажимаю кнопку, вызывающую диалоговое окно «Выбор файла», я получаю сообщение об ошибке NullReferenceException.

 private void tmrClock_Tick(object sender, EventArgs e)
    {
        if (ViewerForm.ActiveForm.Opacity != 1)
        {
        ActiveForm.Opacity = ActiveForm.Opacity + .20;
        }
    }

Сообщение об ошибке указывает на оператор if.

Что я делаю не так?

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Свойство ActiveForm возвращает объект Form, который в данный момент находится в фокусе.

Когда вы открываете диалоговое окно файла, появляется сфокусированная форма, которая не является управляемым Form объектом, поэтому ActiveForm возвращает null.

Предполагая, что ваш таймер находится внутри вашей формы, вы должны просто написать this.Opacity. Ключевое слово this относится к объекту Form, в котором находится таймер.

Кстати, вы должны остановить таймер по окончании анимации (позвонив по номеру tmrClock.Stop())

2 голосов
/ 09 марта 2010

Когда вы показываете модальное диалоговое окно, ваша форма больше не активна. Так что ActiveForm - это модальное диалоговое окно, которое не является Form (это собственное окно), поэтому ActiveForm возвращает ноль.

Почему бы вам не обратиться к самой форме, а не к ActiveForm?

private void tmrClock_Tick(object sender, EventArgs e)
{
    if (this.Opacity != 1)
    {
        this.Opacity = ActiveForm.Opacity + .20;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...