C # Bitmap Active Form> Ссылка на объект не установлена ​​на экземпляр объекта - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь в течение нескольких дней, чтобы решить Ошибка в моем скриншоте Функция активной формы ...

Object reference not set to an instance to an object

Моя проблема: После нескольких часов работы моего exe,Отображается ошибка (новый запуск, работает без ошибок)

Что делает функция: открыть форму, инициализировать новую диаграмму, заполнить ее, сделать снимок экрана с формой и сохранить снимок экрана ...

Код>

                var frm = Form3.ActiveForm;
                await Task.Delay(2000);
                using (var bmp = new Bitmap(frm.Width, frm.Height))
                {
                    frm.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
                    bmp.Save("TestX.png");
                }

Другой код, но не работает для устранения ошибки

        WindowState = FormWindowState.Maximized;
        FormBorderStyle = FormBorderStyle.None;
        Bounds = Screen.PrimaryScreen.Bounds;
        BringToFront();

Ошибка здесь> ... (frm.Width, frm.Height) Поскольку форма не находится в передней части всех других моих приложений и не имеет ширины / высоты, я думаю ... Если я затем перезапустить исполняемый файл, ошибка решена, и моя форма снова перед всеми другими приложениямии затем через несколько часов у меня снова возникает проблема ...

Есть какой-то трюк, чтобы решить его / или форма не должна стоять перед всеми?

1 Ответ

1 голос
/ 09 мая 2019

Это потому, что в какой-то момент ваше приложение перестает иметь активную форму, а свойство Form3.ActiveForm возвращает null вместо объекта Form.См. документацию

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

using (var bmp = new Bitmap(this.Width, this.Height))

Если код не находится в коде вашей формы, вы можете передать экземпляр вашей формы любому вспомогательному классу, создающему снимок экрана

ScreenshotHelper sh = new ScreenshotHelper(this); // assuming you create the helper as part of your form codebehind
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...